[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