2010-07-02 1 views
0

Я пытаюсь написать XML-файлы с помощью libxml2 в ISO-8859-1. Но из документации кажется, что для каждого создаваемого текстового узла мне придется преобразовать в UTF-8, который является внутренней кодировкой libxml. Затем при вызове xmlSaveFormatFileEnc() libxml преобразуется в целевую кодировку и добавляет атрибут кодировки в документ.Внутренние и выходные кодировки LibXML

Правильно ли это предположение? Пока мой код идет примерно так:

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

Это не ответ на ваш вопрос, но я бы на самом деле предложите переосмыслить свое решение использовать Latin-1. Вы, вероятно, пожалеете об этом несколько лет (или даже месяцы) по линии, даже для чего-то такого же простого, как желание символа евро в строке ... Есть веская причина, по которой UTF-8 является кодировкой по умолчанию для XML и любого современного , –

+0

Да, теперь я только пытаюсь получить право UTF-8. isolat1ToUTF8() не хочет мне помогать :( –

ответ

1

Ваше предположение верно. Когда xmlChar ожидается, как в xmlNewCDataBlock, xmlNewText, это всегда UTF-8:

От 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). 
*/ 
Смежные вопросы