Impressão adequada de caracteres UTF-8 no console do Windows
Este artigo tem como objetivo abordar os desafios enfrentados ao tentar imprimir caracteres UTF-8 em no console do Windows.
Descrição do problema
Os usuários encontraram dificuldades ao exibir caracteres alemães usando um código específico snippet:
#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);
}
Apesar de definir a página de códigos de saída como UTF-8, os caracteres alemães não são impressos corretamente.
Solução
Para imprimir dados Unicode corretamente no Console do Windows, existem vários métodos disponíveis:
Solução de problemas
Em caso de erro saída com o terceiro método:
putc('\302'); putc('\260'); // doesn't work with CP_UTF8
puts("\302\260"); // correctly writes UTF-8 data to Windows console with CP_UTF8
Isso ocorre porque a API do console interpreta os dados passados em chamadas separadas como codificações ilegais ao usar CP_UTF8.
Para resolver isso, considere criar uma subclasse streambuf que lida com precisão com a conversão de caracteres multibyte e mantém o estado de conversão entre gravações.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3