由于libxml2內部默認的編碼方式為utf-8,所以當在xml文檔使用中文時必須指明支持中文編碼的編碼方式(如gb2312),否則在解析和生成時將會報錯。另外顯示、輸入、輸出的時候還必須進行編碼轉換,不然將很有可能出現亂碼。
如使用 xmlNodeGetContent(xmlNodePtr cur)接口獲取一個含有中文的節點內容后,為了能夠正常顯示,必須將返回值進行編碼轉換。
下面是編碼轉換函數可參考如下(使用時需要加上頭文件iconv.h):
/***********************************************************************************
功能:
字符編碼轉換
輸入參數:
@fromCode:轉換前的字符編碼方式
@toCode: 轉換后的字符編碼方式
@text: 待轉換的字符串
返回值:
成功: 編碼方式為@toCode的@text字符串
失?。悍祷豊ULL
*************************************************************************************/
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;
}