Правильная печать символов UTF-8 в консоли Windows
Эта статья призвана решить проблемы, возникающие при попытке напечатать символы UTF-8 в консоль Windows.
Описание проблемы
Пользователи столкнулись с трудностями при отображении немецких символов с помощью определенного фрагмента кода:
#include
#include
int main() {
SetConsoleOutputCP(CP_UTF8);
// German characters not appearing
char const* text = "aäbcdefghijklmnoöpqrsßtuüvwxyz";
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);
}
Несмотря на установку выходной кодовой страницы UTF-8, немецкие символы печатаются неправильно.
Решение
Чтобы правильно распечатать данные Unicode в Консоль Windows, существует несколько доступных методов:
Устранение неполадок
В случае неправильного вывода с помощью третьего метода:
putc('\302'); putc('\260'); // doesn't work with CP_UTF8
puts("\302\260"); // correctly writes UTF-8 data to Windows console with CP_UTF8
Это связано с тем, что консольный API интерпретирует данные, передаваемые в отдельных вызовах, как недопустимые кодировки при использовании CP_UTF8.
Чтобы решить эту проблему, рассмотрите возможность создания подклассstreambuf, который точно обрабатывает преобразование многобайтовых символов и поддерживает состояние преобразования между операциями записи.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3