saída inesperada de std :: wcout << L “élève”; no Windows Shell
Pergunta
Ao testar algumas funções para cadeias converter entre wchar_t e utf8 eu conheci o seguinte resultado estranho com Visual C ++ 2008 Express
std::wcout << L"élève" << std::endl;
imprime "ÚlÞve:". O que não é, obviamente, o que é esperado
Este é obviamente um bug. Como pode ser ? Como eu devo lidar com "recurso" tal?
Solução
compilador O C ++ não suporta Unicode em arquivos de código. Você tem que substituir os personagens com suas versões escaparam vez.
Tente isto:
std::wcout << L"\x00E9l\x00E8ve" << std::endl;
Além disso, o console deve suportar Unicode também.
UPDATE:
Ele não vai produzir o resultado desejado em seu console, porque o console não suporta Unicode.
Outras dicas
Eu encontrei estas questões relacionadas com respostas úteis Existe um shell de comando do Windows que irá exibir Unicode caracteres? Como posso incorporar as constantes string Unicode em uma fonte arquivo?
Você também pode querer dar uma olhada em esta questão . Ele mostra como você pode realmente codificar caracteres Unicode em arquivos usando alguns compiladores (eu não tenho certeza do que as opções seriam tem MSVC).
Este é obviamente um bug. Como pode ser isso?
Enquanto outros sistemas operacionais têm dispensado com codificações de caracteres legado e mudou para UTF-8, utiliza o Windows dois codificações legadas: Um "OEM" página de código (usado no prompt de comando) e um "ANSI "página de código (utilizado pela GUI).
Seu arquivo de origem C ++ está em ANSI página de código 1252 (ou, eventualmente, 1254, 1256, ou 1258), mas seu console está interpretando-a como a página de código OEM 850.
Você IDE eo compilador usar a página de código ANSI. O console usa a página de código OEM.
Ele também importa o que você está fazendo com essas funções de conversão.