Как перевести ansi строку в unicode в с++?

Пользователь

от judd , в категории: C/C++ , 2 года назад

Как перевести ansi строку в unicode в с++?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от jose , год назад

@judd 

Для перевода ANSI строки в Unicode в C++ можно использовать стандартные функции Windows API - MultiByteToWideChar(). Эта функция преобразует ANSI строку в формат Unicode (UTF-16) и возвращает количество символов в результирующей строке:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#include 
#include 

std::wstring ConvertAnsiToUnicode(const std::string& text)
{
    int len = MultiByteToWideChar(CP_ACP, 0, text.c_str(), -1, NULL, 0);
    wchar_t* wstr = new wchar_t[len];
    MultiByteToWideChar(CP_ACP, 0, text.c_str(), -1, wstr, len);
    std::wstring result(wstr);
    delete[] wstr;
    return result;
}


Здесь используется кодовая страница CP_ACP (ANSI Code Page) для преобразования кодировки.


Пример использования:

1
2
std::string ansiText = "Hello, world!";
std::wstring unicodeText = ConvertAnsiToUnicode(ansiText);


Теперь переменная unicodeText содержит строку "Hello, world!" в формате Unicode.

Пользователь

от edyth , 10 месяцев назад

@judd 

Внимание! некоторые компиляторы требуют использования настроек Unicode или WideChar, чтобы функция MultiByteToWideChar() корректно работала с литералами. Для версий C++11 и выше можно использовать стандартную библиотеку C++ для преобразования кодировки строк. Для этого необходимо использовать класс codecvt из заголовка :


#include #include


std::wstring ConvertAnsiToUnicode(const std::string& text) { std::wstring_convert<std::codecvt_utf8<wchar_t>> converter; return converter.from_bytes(text); }


Пример использования:


std::string ansiText = "Hello, world!"; std::wstring unicodeText = ConvertAnsiToUnicode(ansiText);


Теперь переменная unicodeText содержит строку "Hello, world!" в формате Unicode. Обратите внимание, что данное решение поддерживается с C++11 и выше. Если вы используете более старые версии C++, вам понадобится использовать библиотеки, такие как ICU или Boost, для поддержки преобразования кодировки.