解决libxml2不支持中文的问题
来源:互联网 发布:更新ios10app网络错误 编辑:程序博客网 时间:2024/05/18 01:27
使用libxml2处理xml文件时,默认加载是使用utf-8编码,所以在修改和保存为GB2312编码时,需要将数据转换为utf-8编码,然后再进行修改和保存!
转换使用iconv,以下是转换代码
char * ConvertEnc( char *encFrom, char *encTo, const char * in)
{
static char bufin[1024], bufout[1024], *sin, *sout;
int mode, lenin, lenout, ret, nline;
iconv_t c_pt;
if ((c_pt = iconv_open(encTo, encFrom)) == (iconv_t)-1)
{
printf("iconv_open false: %s ==> %s/n", encFrom, encTo);
return NULL;
}
iconv(c_pt, NULL, NULL, NULL, NULL);
lenin = strlen(in) + 1;
lenout = 1024;
sin = (char *)in;
sout = bufout;
ret = iconv(c_pt, &sin, (size_t *)&lenin, &sout, (size_t *)&lenout);
if (ret == -1)
{
return NULL;
}
iconv_close(c_pt);
return bufout;
}
以下是实例
test.xml
<?xml version="1.0" encoding="gb2312"?>
<parent>测试</parent>
读取代码
int main(void)
{
xmlDocPtr doc = NULL;
xmlNodePtr cur = NULL;
doc = xmlParseFile("test.xml");
cur = xmlDocGetRootElement(doc);
printf("%s/n", Convert("utf-8", "gb2312", (char *)xmlNodeGetContent(cur)));
}
修改、保存代码
test2.xml
<?xml version="1.0" encoding="gb2312"?>
<story>
<storyinfo>
<author>John Fleck</author>
<datewritten>June 2, 2002</datewritten>
<keyword>我来也 example keyword</keyword>
<书目> C++ </书目>
<测试> test </测试>
</storyinfo>
<body>
<headline>This is the headline</headline>
<para>This is the body text.</para>
</body>
</story>
xmlDocPtr
parseDoc(char *docname, char *uri) {
xmlDocPtr doc;
xmlNodePtr cur;
xmlNodePtr newnode;
xmlAttrPtr newattr;
doc = xmlParseFile(docname);
if (doc == NULL ) {
fprintf(stderr,"Document not parsed successfully. /n");
return (NULL);
}
cur = xmlDocGetRootElement(doc);
if (cur == NULL) {
fprintf(stderr,"empty document/n");
xmlFreeDoc(doc);
return (NULL);
}
if (xmlStrcmp(cur->name, (const xmlChar *) "story")) {
fprintf(stderr,"document of the wrong type, root node != story");
xmlFreeDoc(doc);
return (NULL);
}
newnode = xmlNewTextChild (cur, NULL, (xmlChar *)"reference", NULL);
newattr = xmlNewProp (newnode, (xmlChar *)"uri", (xmlChar *)uri);
return(doc);
}
int main(int argc, char ** argv )
{
int options = 0;
xmlDocPtr doc = NULL;
char * output = NULL;
char * szNode = NULL;
int ret = 0;
xmlAddEncodingAlias("UTF-8", "DVEnc");
xmlKeepBlanksDefault(0);
defaultEntityLoader = xmlGetExternalEntityLoader();
xmlSetExternalEntityLoader(xmllintExternalEntityLoader);
xmlLineNumbersDefault(1);
szNode = Convert("gb2312", "utf-8", "测试" );
doc = parseDoc( argv[2], szNode);
ret = xmlSaveFormatFileEnc(output ? output : "-", doc, argv[1], 1);
if (ret < 0)
{
fprintf(stderr, "failed save to %s/n",
output ? output : "-");
}
return 0;
}
执行
xmlout gb2312 test2.xml
结果
<?xml version="1.0" encoding="gb2312"?>
<story>
<storyinfo>
<author>John Fleck</author>
<datewritten>June 2, 2002</datewritten>
<keyword>我来也 example keyword</keyword>
<书目> C++ </书目>
<测试> test </测试>
</storyinfo>
<body>
<headline>This is the headline</headline>
<para>This is the body text.</para>
</body>
<reference uri="测试"/>
</story>
- 解决libxml2不支持中文的问题
- 解决libxml2不支持中文的问题
- 解决libxml2不支持中文的问题
- LibXML2不支持中文补遗
- svn不支持中文路径问题的解决
- 解决JSChart画图不支持中文的问题
- svn不支持中文路径问题的解决
- 解决json_encode不支持中文问题
- Sass解决不支持中文问题
- 解决linux下poppler不支持中文PDF的问题。
- tomcat不支持中文路径和文件名问题的解决
- 解决linux环境下,atom编辑器不支持中文的问题
- 解决NSArray和NSDictionary不支持中文的问题
- VTST不支持中文的解决
- Matlab R2013a 解决中文乱码问题(解决不支持中文的问题)
- LCC-Win32 不支持中文路径的解决
- Mint Linux自定义快捷键不支持中文路径的问题的解决
- Serv-U 8 不支持以中文命名文件上传问题的解决
- 了解SQL Server触发器及触发器中的事务
- php的autoload机制的实现解析
- Android 中的BroadCastReceiver
- Dependency Injection with Autofac
- Eclipse 开发Tuscany应用
- 解决libxml2不支持中文的问题
- 用textarea接受换行符以及多换行符的处理
- vim基本命令
- 在ubuntu上关闭tomcat的自启动
- Android自定义属性时TypedArray的使用方法
- Sqlserver自关联
- [一分钟先生]倪邵峰:管理者应具备的能力与素质
- php array_multisort 排序
- java获取时间