由于libxml2内部默认的编码方式为utf-8,所以当在xml文档使用中文时必须指明支持中文编码的编码方式(如gb2312),否则在解析和生成时将会报错。另外显示、输入、输出的时候还必须进行编码转换,不然将很有可能出现乱码。
如使用 xmlNodeGetContent(xmlNodePtr cur)接口获取一个含有中文的节点内容后,为了能够正常显示,必须将返回值进行编码转换。
下面是编码转换函数可参考如下(使用时需要加上头文件iconv.h):
/***********************************************************************************
功能:
字符编码转换
输入参数:
@fromCode:转换前的字符编码方式
@toCode: 转换后的字符编码方式
@text: 待转换的字符串
返回值:
成功: 编码方式为@toCode的@text字符串
失败:返回NULL
*************************************************************************************/
static int encodeConvert(char* fromCode,char* toCode,const char* srctext, char *destext)
{
char bufout[1024] = {0};
char *sin,*sout;
int length_in,length_out,err;
iconv_t c_pt;
c_pt=iconv_open(toCode,fromCode);
if(c_pt==(iconv_t)-1)
{
return 0;
}
iconv(c_pt,NULL,NULL,NULL,NULL);
length_in=strlen(srctext)+1;
length_out=1024;
sin=(char*)srctext;
sout=bufout;
err=iconv(c_pt,&sin,(size_t*)&length_in,&sout,(size_t*)&length_out);
if(err==-1)
{
return 0;
}
iconv_close(c_pt);
strcpy(destext, bufout);
return 1;
}