libxml2 в C ++, установить кодировку для синтаксического анализатора - «Ввод неправильный UTF-8» - PullRequest
1 голос
/ 01 июня 2011

Я хочу разобрать в C ++ простые сообщения о состоянии от веб-службы, фрагменты XML без атрибута кодирования.

<message xmlns="http://violation.importer.xyz.de/xsd">
    Der Import-Datensatz mit der Bezeichung="blabla" und der Id=68809 wurde erfolgreich importiert.
</message>

Кажется, они соответствуют ISO-8859-1.Можно ли установить парсер на эту кодировку?API сбивает меня с толку.

Вот мой код, xml находится в char * it (кстати, итератор)

xmlNodePtr root_element_ptr;
xmlDocPtr xmldoc_ptr;

xmldoc_ptr = xmlReadMemory(*it, strlen(*it), "it.xml", NULL, 0);
root_element_ptr = xmlDocGetRootElement(xmldoc_ptr);
xmlNodePtr msgnode = root_element_ptr->xmlChildrenNode;
xmlChar *message = xmlNodeListGetString(xmldoc_ptr, msgnode, 1);
response_msg += *message;
response_msg += " / ";
xmlCleanupParser();
xmlFreeDoc(xmldoc_ptr);

это работает, но segfaults на символе Umlaut и в моем журналея вижу

it.xml:1: parser error : Input is not proper UTF-8, indicate encoding !
Bytes: 0xE4 0x72 0x7A 0x74

так что из этого мне нужно использовать?http://xmlsoft.org/html/libxml-encoding.html

1 Ответ

3 голосов
/ 01 июня 2011

После публикации проблемы здесь на SO, она часто становится понятной и более легкой. Вот что я изменил и все работает

xmlParserCtxtPtr ctxt_ptr = xmlNewParserCtxt();
xmldoc_ptr = xmlCtxtReadMemory( ctxt_ptr, *it, strlen(*it), "it.xml", "ISO-8859-1", 0);
//xmldoc_ptr = xmlReadMemory(*it, strlen(*it), "it.xml", NULL, 0);
...