"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como imprimir caracteres UTF-8 corretamente no console do Windows com caracteres alemães?

Como imprimir caracteres UTF-8 corretamente no console do Windows com caracteres alemães?

Publicado em 2024-11-09
Navegar:236

How to Print UTF-8 Character Correctly in Windows Console with German Characters?

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:

  1. Usando WriteConsoleW diretamente: Comunique-se explicitamente com a API do console usando WriteConsoleW. Essa abordagem garante que os dados sejam gravados corretamente no console. No entanto, é necessário distinguir entre situações de saída de console e não-console.
  2. Configuração do modo de saída: Defina o modo de saída dos descritores de arquivo de saída padrão para "_O_U16TEXT" ou "_O_U8TEXT" via _setmode. Isso permite que funções amplas de saída de caracteres enviem dados Unicode corretamente para o console. Observe que este método requer o uso apenas de funções de caracteres largos no fluxo selecionado.
  3. Codificação CP_UTF8: Imprima texto UTF-8 diretamente no console definindo a página de códigos de saída do console como CP_UTF8 e usando o apropriado funções de baixo nível ou uma implementação ostream personalizada.

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.

Tutorial mais recente Mais>

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