Hola a todos
Estamos en fase de terminar el juego, bueno... supongo que en dos meses estará listo, y me estoy encontrando con problemas que no se exactamente como solucionar y son bastante jodidos....
La cosa es que en el juego creado diferentes archivos XML con configuraciones y datos de los niveles y eso, y me he encontrado el problema que cuando mete una ñ o un acento en el XML luego no puedo cargarlo. Me he dado cuenta que los archivos se crean en ISO-8859-15 y cuando los paso a UTF-8 ya funcionan perfectamente
Uso "fopen" de esta manera:
f = fopen((char*)file.c_str(), "w+");
y voy haciendo los fwrite línea por línea
fwrite(tmp_val, strlen(tmp_val), 1, f);
la cuestión es ¿como podría hacer para crear directamente los archivos en UTF-8? ¿puedo hacerlo de esta forma o tendría que cambiar el código para generar los archivos de otra manera?
muchas gracias de verdad, me estáis salvando la vida estos días
Resumiendo, char solo te vale para carácteres cortos. Abrirte el fichero te lo va a hacer bien. pero luego, si haces un strlen una ñ te contará como dos carácteres, por ejemplo. Así que hay que recurrir a los wchar que por lo menos pueden almacenar carácteres de hasta 16 bits* (siempre que no metas en el xml sánscrito, chino o nepalí te vale :lol:).
Mírate estos enlaces:
http://www.opengroup.org/onlinepubs/007908775/xsh/wchar.h.html
http://icu-project.org/docs/papers/unicode_wchar_t.html
EDITO: * 16 --creo-- que es lo que da gcc, pero es algo dependiente del compilador. Si alguien puede verificarlo se agradecería.
Otra posible solución es especificar en las cabeceras del XML que estáis usando iso-8859-1.
<?xml version="1.0" encoding="ISO-8859-1"?>
Ahora que ya sabes como es la dinamica interna de los xml, yo te aconsejaria usar alguna libreria que ya tiene esos temas controlados.
Usa VB.NET para hacer una aplicación sencilla para construir los XML. No vas a tardar tiempo y lo poco que ganes, lo recuperaras luego.
TinyXML soporta UTF8