c++ - C++中的libxml2,如何设置编码

标签 c++ libxml2

我正在使用 C++ 中的 libxml2 创建一个 xml 文档。创建 xml 文件后,我在 xml 缓冲区的顶部看到以下行。

<?xml version="1.0" encoding="ISO-8859-1"?>

我在创建文档时没有指定任何编码。一些 xml 内容的 ascii 值大于 127,这不是 ISO-8859-1 编码处理的。例如:我的 xml 内容中有英镑字符 (£)。因此,每当它遇到大于 127 的 ascii 值时,它就会中断并且我的 xml 文件不完整。我从一些论坛上读到说将编码更改为 UTF-8 可以处理这种情况。但我不知道如何为 xml 文档创建指定编码。以下是我使用的示例代码。

xmlDoc *doc = NULL;
xmlChar *xmlbuff = NULL;
int buffersize;
xmlNodePtr pNode;
doc = xmlNewDoc(NULL);
pNode = xmlNewNode(0, (const xmlChar*)"Temp");
xmlDocSetRootElement(doc, pNode);
xmlSetProp(pNode, (const xmlChar*)"Item", (const xmlChar*)"Office£");
xmlDocDumpMemory(doc, &xmlbuff, &buffersize);
xmlFree(xmlbuff);
xmlFreeDoc(doc);
doc = NULL;

输出:

<?xml version="1.0" encoding="ISO-8859-1"?>
<Temp Item="Office

最佳答案

我想你应该使用 xmlDocDumpMemoryEnc()(或者 xmlDocDumpFormatMemoryEnc(),如果你也想控制缩进)而不是 xmlDocDumpMemory().

有点像

xmlDocDumpMemoryEnc(doc, &xmlbuff, &buffersize, "UTF-8");

关于c++ - C++中的libxml2,如何设置编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37485096/

相关文章:

c++ - QSignal Manager - 无法将多个信号连接到一个插槽

c - 如何修复由 realloc 越界引起的段错误?

php - 无法使用 SimpleXML 解析 CDATA

c - 使用 libxml2 从内存中读取 DTD

ubuntu - 尝试在 ubuntu 上安装 libxml2-dev 时出现错误消息

xpath - xpath 'or'与xmllib2的行为类似union ('|')

c++ - 有人可以举例说明递归如何与 while 循环一起使用吗?我无法理解流程

c++ - 将右值绑定(bind)到左值引用

c++ - 线程应该作用于单独的内存吗?

c++ - 堆内存为何产生?