使用libxml2库设置encoding的问题

来源:互联网 发布:摄像机采集软件 编辑:程序博客网 时间:2024/06/16 15:56

因为用 xmlDocPtr doc = xmlNewDoc(BAD_CAST "1.0"); 语句默认生成的 XML 结构未指定编码。
如下:

<?xml version="1.0"?>


于是使用 xmlNewDocProp 方法,发现无任何作用,猜测可能是libxml2的bug:

xmlNewDocProp(doc, BAD_CAST "encoding", BAD_CAST "gb2312");


使用方法 doc->encoding = BAD_CAST "gb2312"; 程序运行至该行时直接崩溃。

求助度娘和谷哥,无果。
无意中看到一篇文章,介绍 xmlDocFree()错误时,可以指定 doc->encoding = strdup("GBK");

于是尝试该方法,修改代码如下:

doc->encoding = BAD_CAST strdup("gb2312");


测试OK,生成XML为:

<?xml version="1.0" encoding="gb2312"?>


总结,这里必须用 strdup 复制一个字符串出来,如果直接用常量字符串则会引起崩溃,猜测可能是libxml2库的内存管理问题。

原创粉丝点击