@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.
@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, для поддержки преобразования кодировки.