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?

Foi útil?

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

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top