Pregunta

Mientras se probaba algunas funciones para convertir cadenas entre wchar_t y utf8 me encontré con el siguiente resultado raro con Visual C ++ Express 2008

std::wcout << L"élève" << std::endl;

imprime "ÚlÞve:". Que obviamente no es lo que se espera

Esto es obviamente un error. Como puede ser ? ¿Cómo se supone que debo hacer frente a tales "característica"?

¿Fue útil?

Solución

El compilador de C ++ no soporta Unicode en archivos de código. Usted tiene que reemplazar a los personajes con sus versiones escapado en su lugar.

Prueba esto:

std::wcout << L"\x00E9l\x00E8ve" << std::endl;

Además, la consola debe ser compatible con Unicode también.

ACTUALIZACIÓN:

No se va a producir la salida deseada en la consola, ya que la consola no admite Unicode.

Otros consejos

También puede ser que desee echar un vistazo a esta pregunta . Se muestra cómo se puede realmente difícil que el código caracteres Unicode en archivos que utilizan algunos compiladores (no estoy seguro de lo que las opciones se consiguieron MSVC).

  

Esto es obviamente un error. ¿Cómo puede ser eso?

Mientras que otros sistemas operativos han prescindido de la codificación de caracteres heredados y cambiado a UTF-8, Windows utiliza dos codificaciones heredadas: Una página "OEM" código (utilizado en el símbolo del sistema) y un "ANSI "página de códigos (utilizado por la interfaz gráfica de usuario).

Su archivo fuente C ++ se encuentra en la página de códigos ANSI 1252 (o posiblemente 1254, 1256, o 1258), pero su consola está interpretando como página de códigos OEM 850.

IDE y el compilador utiliza la página de códigos ANSI. La consola utiliza la página de códigos OEM.

También importa lo que haces con esas funciones de conversión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top