Внутренние и выходные кодировки LibXML - PullRequest
0 голосов
/ 02 июля 2010

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

Это предположение верно? На данный момент мой код выглядит примерно так:

xmlNode *root_element = NULL, *node4 = NULL; xmlDoc *doc = NULL;</p> <pre><code>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);

1 Ответ

1 голос
/ 10 сентября 2012

Ваше предположение верно.Когда ожидается 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).
 */
...