在Libxml2中解決中文問(wèn)題(轉(zhuǎn))
由于libxml2內(nèi)部默認(rèn)的編碼方式為utf-8,所以當(dāng)在xml文檔使用中文時(shí)必須指明支持中文編碼的編碼方式(如gb2312),否則在解析和生成時(shí)將會(huì)報(bào)錯(cuò)。另外顯示、輸入、輸出的時(shí)候還必須進(jìn)行編碼轉(zhuǎn)換,不然將很有可能出現(xiàn)亂碼。
如使用 xmlNodeGetContent(xmlNodePtr cur)接口獲取一個(gè)含有中文的節(jié)點(diǎn)內(nèi)容后,為了能夠正常顯示,必須將返回值進(jìn)行編碼轉(zhuǎn)換。
下面是編碼轉(zhuǎn)換函數(shù)可參考如下(使用時(shí)需要加上頭文件iconv.h):
/***********************************************************************************
功能:
字符編碼轉(zhuǎn)換
輸入?yún)?shù):
@fromCode:轉(zhuǎn)換前的字符編碼方式
@toCode: 轉(zhuǎn)換后的字符編碼方式
@text: 待轉(zhuǎn)換的字符串
返回值:
成功: 編碼方式為@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; } |
posted on 2008-05-30 02:43 大龍 閱讀(1498) 評(píng)論(0) 編輯 收藏 引用