c++ - C++ 中的 libxml2,为解析器设置编码 - "Input is not proper UTF-8"

标签 c++ encoding libxml2

我想在 C++ 中解析来自 Web 服务的简单状态消息,没有编码属性的 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 中(一个迭代器 btw)

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);

这行得通,但是我在我的日志中看到了元音变音字符的段错误

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

最佳答案

在 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);

关于c++ - C++ 中的 libxml2,为解析器设置编码 - "Input is not proper UTF-8",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6204239/

相关文章:

c++ - 是否可以使用 `std::set_intersection` 来检查两个集合是否有任何共同元素?

python - 在python中将字节字符串转换为十六进制字符串

macos - 如何判断 OS X 上安装了哪个版本的 libxml2 和 libxslt?

perl - 如何在 Ubuntu 上安装 XML::LibXML

c++ - 表达式的有效值是什么 (uninitialized_bool ? 1 : 2)?

c++ - 比较实现 C++ 映射不完整类型不允许

c++ - 在 C++ 中传递给函数的数组给出不同的长度

c - UTF-8 的语言环境是什么?

python - PyPDF2<=1.19 存在 PDF 编码问题

memory-management - libXML:检查节点是否已经取消链接并释放