Buenas compañeros,
Os cuento, estoy trabajando con libxml2 para almacenar unos datos de una aplicación, en concreto los datos de una agenda. Intento que estos datos se almacenen en UTF-8.
El problema que me estoy encontrando es que, inicialmente cargo el fichero xml con los datos en UTF-8, con kate le estoy indicando el encoding, y tenga acentos o no lo carga sin problemas. Pero cuando realizo cambios y guardo los datos de nuevo en el fichero, si le he metido algún acento, me falla al cargar la agenda en la siguiente ejecución.
No sé si me estoy explicando bien.
Mis locales son:
LANG=es_ES@euro
LC_CTYPE="es_ES@euro"
LC_NUMERIC="es_ES@euro"
LC_TIME="es_ES@euro"
LC_COLLATE="es_ES@euro"
LC_MONETARY="es_ES@euro"
LC_MESSAGES="es_ES@euro"
LC_PAPER="es_ES@euro"
LC_NAME="es_ES@euro"
LC_ADDRESS="es_ES@euro"
LC_TELEPHONE="es_ES@euro"
LC_MEASUREMENT="es_ES@euro"
LC_IDENTIFICATION="es_ES@euro"
LC_ALL=es_ES@euro
¿Es esto un impedimento para guardar los datos en UTF-8? Si lo fuese, no me importaría almacenar los datos en iso-8859-15.
A la hora de crear el doc xml y guardarlo, hago lo siguiente:
xmlSwitchEncoding(NULL, XML_CHAR_ENCODING_UTF8);
xmlDocPtr doc = NULL;
xmlNodePtr root_node = NULL;
doc = xmlNewDoc(BAD_CAST "1.0");
root_node = xmlNewNode(NULL, BAD_CAST "agenda");
xmlDocSetRootElement(doc, root_node);
xmlCreateAgenda(root_node, agenda);
xmlSaveFormatFileEnc(filename.c_str(), doc, "UTF-8", 1);
xmlFree(doc);
¿Estoy haciendo algo mal? Quizá tenga que hacer algún tipo de "casting" de la codificación de las cadenas a la hora de guardarlas, no sé. La verdad es que es la primer avez que uso está biblioteca y estoy un pelín perdido. Por otra parte, esa función xmlCreateAgenda es mía, se encarga de ir creando la jerarquía de nodos para guardar la agenda en el fichero.
No sé si me he explicado bien y/o he aportado suficiente info. En cualquier caso, si son necesarios más datos, avisadme
Espero que alguien me pueda ayudar,
Muchas gracias
Saludos
[EDITO]: Se me olvidaba, el error:
agenda.xml:9: parser error : Input is not proper UTF-8, indicate encoding !
Bytes: 0xE9 0x3C 0x2F 0x6E
José
^
ese circunflejo se supone que va debajo de é