Как выводить символы в кодировке utf8 обычно в консольном приложении c / c ++? - PullRequest
2 голосов
/ 05 октября 2010

Вот что я получаю сейчас wprintf:

1胩?鳧?1敬爄汯?瑳瑡獵猆慴畴??

utf8 просто не поддерживается Windows?

Ответы [ 2 ]

6 голосов
/ 05 октября 2010

Нет, Windows не поддерживает печать UTF-8 на консоли.

Когда Windows говорит "Unicode", это означает UTF-16.Вам необходимо использовать MultiByteToWideChar для преобразования из UTF-8 в UTF-16.Как то так:

char* text = "My UTF-8 text\n";
int len = MultiByteToWideChar(CP_UTF8, 0, text, -1, 0, 0);
wchar_t *unicode_text = new wchar_t[len];
MultiByteToWideChar(CP_UTF8, 0, text, -1, unicode_text, len);
wprintf(L"%s", unicode_text);
1 голос
/ 05 октября 2010

wprintf предполагается получить строку в кодировке UTF-16. Для конвертации используйте следующее:

Используйте MultiByteToWideChar с CP_UTF8 кодовой страницей для преобразования. (и не делайте слепого броска из char* в wchar_t*).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...