tengo un programa que imprima cadena UTF-8 en la consola:¿Cuál es la diferencia entre printf y std :: ostream debajo de la consola ventanas con UTF-8 salida
#include <stdio.h>
int main()
{
printf("Мир Peace Ειρήνη\n");
return 0;
}
puedo configurar la consola para utilizar Verdadero Tipo de letra (Lucida Console), definir códigos UTF-8 páginas (chcp 65001) compilar este programa con tanto MinGW GCC y Visual Studio 2010 que funciona perfectamente, veo: la salida:
Мир Peace Ειρήνη
hago lo mismo utilizando std::cout
#include <iostream>
int main()
{
std::cout << "Мир Peace Ειρήνη\n" ;
return 0;
}
Esto funciona perfectamente bien como el anterior usando MinGW GCC pero con Visual Studio 2010 obtengo cuadrados, más que eso los cuadrados (dos por cada letra no ASCII).
Si ejecuto el programa con la redirección test >test.txt
obtengo la salida UTF-8 perfecta en el archivo.
Ambas pruebas realizadas en Windows 7.
Preguntas:
- ¿Cuál es la diferencia entre printf y std :: cout en el estudio de la biblioteca estándar visual en la manipulación del flujo de salida - con claridad uno de ellos funciona y el otro no?
- ¿Cómo se puede corregir esto?
respuesta real:
En resumen: que se atornillan - std::cout
no funciona muy bien con MSVC + UTF-8 - o al menos requiere un enorme esfuerzo para hacer que se comporte razonablemente.
En largo: lea dos artículos a los que se hace referencia en la respuesta.
No es seguro AFAIK para incrustar el Unicode directamente en su código fuente. Creo que la forma más segura es usar algún tipo de recurso o ingresar puntos de código Unicode con \ uy el u8 literal (C++ 11) –
printf() que genera unicode y std :: cout también son asunto de [ Problemas Unicode en C++ pero no C] (http://stackoverflow.com/questions/21370710) – Salvador