2010-07-02 9 views
0

J'essaie d'écrire des fichiers XML avec libxml2 dans ISO-8859-1. Mais à partir de la documentation, il semble que pour chaque nœud de texte que je crée, je devrais convertir en UTF-8 qui est le codage interne de libxml. Puis, lors de l'appel de xmlSaveFormatFileEnc(), libxml convertit le codage cible et ajoute l'attribut de codage au document.Codages internes et de sortie LibXML

Cette hypothèse est-elle correcte? Pour l'instant mon code va à peu près comme ceci:

xmlNode *root_element = NULL, *node4 = NULL; xmlDoc *doc = NULL;

doc = xmlNewDoc(BAD_CAST XML_DEFAULT_VERSION); 
root_element = xmlNewDocNode(doc, NULL, BAD_CAST("root"), 
        NULL); 
char * input_str = getLatin1Data(); 
isolat1ToUTF8(utf8_str, &file_size, input_str, &inlen); 

node4 = xmlNewCDataBlock(doc, BAD_CAST list_content, xmlStrlen(BAD_CAST utf8_str)); 

xmlAddChild(root_element, node4); 
xmlSaveFormatFileEnc("test_file.xml", doc, "UTF-8", 1); 
xmlFreeDoc(doc); 

+0

Cela ne répond pas à votre question, mais je voudrais vraiment suggérer de repenser votre décision d'utiliser Latin-1. Vous le regretterez probablement quelques années (voire quelques mois), même pour quelque chose d'aussi simple que de vouloir un symbole Euro dans une chaîne ... Il y a de bonnes raisons pour que UTF-8 soit l'encodage par défaut pour XML et tout ce qui est moderne . –

+0

Oui, maintenant j'essaie seulement d'obtenir la conversion UTF-8 à droite. isolat1ToUTF8() ne veut pas m'aider si :( –

Répondre

1

Votre hypothèse est juste. Lorsque xmlChar est prévu, comme dans xmlNewCDataBlock, xmlNewText, il est toujours UTF-8:

De include/libxml/xmlstring.h (libxml 2.8.0):

/** 
* xmlChar: 
* 
* This is a basic byte in an UTF-8 encoded string. 
* It's unsigned allowing to pinpoint case where char * are assigned 
* to xmlChar * (possibly making serialization back impossible). 
*/