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

libxml2 in C++, how to set encoding

我正在使用 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");