# Charset a usar al programar aplicaciones multiplataforma

## i92guboj

Buenas.

Hoy traigo una de esas preguntas extrañas que tienen que ver con Gentoo, con el español más que con el inglés (donde rara vez tienen problemas con los juegos de caracteres) y con algún otro SO.

Desde hace un tiempo vengo desarrollando aplicaciones de Gestión para una empresa, usando C++/QT y un puñado de librerías de código abierto para varios fines. El problema es que no termino de encontrar una forma de trabajo cómoda en lo que a códigos de caracteres se refiere.

Mi instalación de Gentoo es completamente UTF-8, hasta donde yo sé. Ha sido así desde hace tantos años que ni me acuerdo cuando hice el cambio. Windows XP, que es uno de los sistemas para los que he de producir binarios, parece no entender dicha codificación, por lo cual aparecen caracteres extraños en pantalla en cada uno de los lugares donde debería aparecer un caracter multibyte.

Si guardo todos los archivos fuente desde qtcreator en iso-8859-15 y recompilo, todo funciona a las mil maravillas, pero la desventaja de eso es que para volver a editarlos tengo que reabrirlos en qtcreator la próxima vez como iso-8859-15 y luego volver a guardarlos en utf-8, ya que de otro modo el archivo es de solo lectura y no me deja editarlo.

Para colmo, un fallo en esta secuencia de guarda/carga puede (y en alguna ocasión ha ocurrido) destruír información en los archivos, de forma que más de una vez me ha tocado ir corrigiendo todos los acentos y similares de mis archivos fuente por no haber estado atento a lo que estaba haciendo.

Llevo más o menos un año trabajando así, y ya estoy un poco harto.

Quisiera saber cómo gestionan otros usuario en similares circunstancias este tipo de cosas. Supongo que en versiones posteriores de Windows utf-8 quizás no sea un problema, pero eso realmente no me ayuda.

Cualquier tipo de información sobre este tema es bienvenida. Realmente no puedo hacer preguntas más concretas, porque no sé si el problema está en mi forma de gestionar el asunto, si simplemente esto es así y la única solución es aguantarse, o si hay algún tipo de solución intermedia que pueda ayudarme en mi tarea.

Saludos  :Smile: 

----------

## gringo

pues ni idea macho, yo de programación mas bien lo justo.

puedes pegarnos un snippet  para ver si vemos algo ?

si no y a falta de una idea mejor, en vez de andar editando puedes usar iconv para convertirlos, algo en plan :

```
 iconv -f cp1252 -t utf-8 foo.cpp > foo_utf8.cpp
```

saluetes  :Wink: 

----------

## i92guboj

Buenas, y gracias por contestar.

 *gringo wrote:*   

> pues ni idea macho, yo de programación mas bien lo justo.
> 
> puedes pegarnos un snippet  para ver si vemos algo ?

 

Es complicado explicar esto en un corta pega en el foro (eso sin contar conque el foro y tu navegador podrían distorsionar el resultado). Básicamente todo se resume a lo siguiente:

en gentoo puedo ver el contenido de un cpp codificado en utf8 sin problema, y editarlo, pero no puedo editarlo en condiciones si el cpp está codificado en iso-8859-15 (no puedo editar los acentos y otros caracteres especiales).

en windows, los binarios generados con el cpp en utf8 muestran basura en pantalla, en lugar de los caracteres latinos correctos; el binario generado con el cpp en iso-8859-15 funciona bien y muestra los caracteres correctos;

Otro problema es que qtcreator tiene un locale predefinido, en este caso utf8 porque es el de mi sistema. Si un fuente está codificado con iso-8859-15, y lo cargas como utf8 (se abre así por defecto), simplemente no te deja editarlo. El gran problema de esto es que, al margen de que el archivo tenga acentos o no, no puedo cambiar ni un caracter en el mismo hasta que desde el menú editar escojo la codificación correcta y selecciono la opción para "recargar" dicho archivo con esa codificación. Imagina lo tedioso que se vuelve todo esto cuando el proyecto empieza a crecer en tamaño y hay que partir las fuentes en varios archivos.

En Windows no edito nada, así que en lo que respecta a eso no tengo problema alguno  :Laughing: 

 *Quote:*   

> 
> 
> si no y a falta de una idea mejor, en vez de andar editando puedes usar iconv para convertirlos, algo en plan :
> 
> ```
> ...

 

Esto es más o menos lo que he estado haciendo desde hace algún tiempo, aunque es un engorro, supongo que no hay muchas más soluciones. Como ya habrás intuído por lo que explico arriba, la conversión de los archivos es solo uno de los problemas. 

Lo más jocoso que me han llegado a sugerir (en otro foro) es que me limite al ASCII de 7 bits cuando esté programando. Supongo que intentar explicarle el por qué de la necesidad de caracteres distintos a los del alfabeto inglés a un angloparlante es como intentar discutir con una vaca sobre la importancia de la vestimenta. Simplemente ellos no tienen esa necesidad así que el problema no existe  :Laughing: 

No tengo problema alguno con el inglés, y entiendo que soportar cualquier cosa fuera de un juego de caracteres mínimo en lo que se refiere a la gramática, vocabulario y sintaxis de un lenguaje de programación no tiene ventaja alguna. 

Pero las cadenas que acaban impresas en la pantalla o sobre el papel son otra cosa. No van dirigidas a programadores, sino a usuarios finales, gente que cada vez está más separada del nivel técnico que el usuario medio tenía hace 20 años (sinceramente, no me imagino a ningún novato de oficina escribiendo comandos de MSDOS y aprendiéndose los atajos de teclado de MSWORD o Wordperfect).

Me niego rotúndamente a publicar un programa firmado por mi que contenga errores ortográficos a sabiendas de que los contiene. Errores podemos tener todos, pero cometerlos deliberadamente...

 :Rolling Eyes: 

----------

## chumi

Bueno, hace tanto que no escribo por aquí (y en su momento lo hice tan poco) que a todas luces parecerá que soy nuevo, aunque hace años que uso gentoo y de vez en cuando os leo (ávidamente, por supuesto  :Smile: )

Seguro que suelto un disparate, pero es igual, por soltarlo que no quede....

El tema de los charsets siempre lo he encontrado realmente fustrante, y pocas soluciones me han funcionado correctamente.

Se me ocurre que debería ser posible tener instalado el charset es_ES.iso885915@euro además del es_ES.UTF-8 (al menos yo lo tengo así) y cambiarlo con un 'eselect locale set xxx' antes de ejecutar el editor de cpp. Si funciona, incluso podrías plantearte crear un nuevo usuario con ese charset como defecto, y utilizarlo para manejar los programas que tienen como destino final windows.

Por opinar que no quede...

Saludos!!

----------

## i92guboj

La cosa es un poco desastrosa, sí. De todas formas esto tampoco es que sea un problema nuevo. Siempre ha habido historias de este tipo al compartir archivos entre distintos sistemas operativos, y entre diferentes lenguajes.

utf-8 es un intento de arreglar esto, aunque, por desgracia, todavía queda un largo camino por andar.

Estoy evaluando los pros y contras de varias soluciones, por ahora sigo con mis scripts de conversión. De todas formas, para compilar en la máquina virtual necesito un script que me pase los archivos a un lugar concreto de mi sistema de archivos, así que lo puedo hacer todo desde ahí. Pero aún así es todo un engorro.

Saludos y gracias a todos  :Smile: 

----------

## pcmaster

Hola,

Buscando en Google Windows UTF8 aparecen varios enlaces, entre ellos éste: http://en.wikipedia.org/wiki/Unicode_in_Microsoft_Windows

Parece ser que Windows no soporta UTF8 pero sí UTF-16.

----------

## natrix

Un tópico así puede terminar en la recopilación de los mejores temas.

Yo tengo un problema muy parecido con los scripts de Matlab: en las corridas me aparecen caráceteres extraños donde irian acentos y “ñ” según en que OS los corra; esto lo vengo solucionando insertando texto en latex del tipo “á=\'a”. Desconozco si C++ tiene esa flexibilidad, aún así no es lo ideal.

----------

