[C con Clase] Error al mostrar caracter no ASCII
Programante
programante en gmail.com
Lun Mayo 18 02:51:35 CEST 2009
Ángel escribió:
> Hola a todos, hace poco he topado con cierto misterio al que no
> consigo encontrar una explicación, se trata de una inquietud puramente
> intelectual, nada importante, así que si tenéis tiempo y alguna
> explicación... pues agradecido.
>
> En C++, cuando intento mostrar en consola un carácter fuera del
> Standard ASCII, por ejemplo 'ñ' la salida es bastante inesperada:
>
> char c;
> int i;
>
> c = 'ñ'; // 'ñ' tiene, debería tener el código 164
> i = c;
>
> std::cout << c << std::endl;//muestra el caracter '+-'
> std::cout << i << std::endl;//correspondiente al código -15
> equivalente a 241
>
> Sin embargo si:
>
> i = 164;
> c = i;
>
> std::cout << c << std::endl;//muestra el caracter 'ñ'
> std::cout << i << std::endl;//correspondiente al código 164
>
> ¿Alguna idea de por qué no funciona en el primer caso?
Estás introduciendo la ñ en windows-1252, mientras que la salida de la
consola de windows está en CP-850.
Los caracteres altos (>127) no coinciden y por eso aparecen caracteres
distintos. Puedes sustituir la ñ en tus
cadenas por el caracter ñ de CP-850, o poner un filtro antes de sacar la
salida en la consola.
Para mayor confusión, si en vez de mostrarlo por consola, rediriges la
salida a un archivo, entonces verás
bien los códigos windows-1252 pero mal los CP-850.
Más información sobre la lista de distribución Cconclase