Я использую макросы преобразования строк ATL / MFC. Например, если у вас есть строка ASCII с именем myUTF8Str
, содержащая символы UTF8:
::MessageBox(hWnd, CA2T(myUTF8Str, CP_UTF8), _T("Caption"), MB_OK);
В качестве альтернативы вы можете создать экземпляр строки, например ::
CA2T myConvertedString(myUTF8Str, CP_UTF8);
...
TRACE(_T("Converted: %s\n"), myUTF8Str.m_psz);
Обратите внимание на элемент m_psz
, который разрешает доступ только для чтения к необработанному указателю строки.
Вы также можете кодировать, используя CT2A
, например ::
CT2A myEncodedString("Some UTF8", CP_UTF8);
Если вы не используете макросы TEXT, используйте CA2W, CW2A и т. Д.