la salida inesperada de std :: wcout << L “élève”; en Windows Shell
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"?
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
He encontrado estas preguntas relacionadas con respuestas útiles ¿Hay un intérprete de comandos de Windows que mostrará Unicode personajes? Cómo puedo incrustar las constantes de cadena Unicode en una fuente presentar?
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.