#include #include #include #include #include #include #include int code_convert(char *from_charset, char *to_charset, char *inbuf, size_t inlen,
char *outbuf, size_t outlen)
int u2g(char *inbuf, size_t inlen, char *outbuf, size_t outlen)
int g2u(char *inbuf, size_t inlen, char *outbuf, size_t outlen)
int main(void)
上面是使用iconv函式。
方式二: 使用如下兩個函式
mbstowcs將多位元組編碼轉換為寬位元組編碼
wcstombs將寬位元組編碼轉換為多位元組編碼
注意, 需要系統編碼的支援, 可以通過locale -a 檢視系統支援的。若不支援zh_cn.gbk, 需要安裝,例如,在ubuntu上的安裝步驟如下:
編輯
$sudo vi /var/lib/locales/supported.d/zh-hans更新成
zh_cn.utf-8 utf-8zh_sg.utf-8 utf-8
zh_cn.gbk gbk
zh_cn.gb18030 gb18030
// 更新$ sudo locale-gen
// 檢視
$ locale -a
cposix
zh_cn.gb18030
zh_cn.gbk
zh_cn.utf8
zh_sg.utf8
#include #include #include #include #include #include #include /**
* description: 實現由utf8編碼到gbk編碼的轉換
* * input: gbkstr,轉換後的字串; srcstr,待轉換的字串; maxgbkstrlen, gbkstr的最
大長度* output: gbkstr
* returns: -1,fail;>0,success
* */
int utf82gbk(char *gbkstr, const char *srcstr, int maxgbkstrlen)
//首先先將utf8編碼轉換為unicode編碼
if (null == setlocale(lc_all, "zh_cn.utf8")) //設定轉換為unicode前的碼,當前為utf8編碼
int unicodelen = mbstowcs(null, srcstr, 0); //計算轉換後的長度
if (unicodelen <= 0)
wchar_t *unicodestr = (wchar_t *) calloc(sizeof(wchar_t), unicodelen + 1);
mbstowcs(unicodestr, srcstr, strlen(srcstr)); //將utf8轉換為unicode
//將unicode編碼轉換為gbk編碼
if (null == setlocale(lc_all, "zh_cn.gbk")) //設定unicode轉換後的碼,當前為gbk
int gbklen = wcstombs(null, unicodestr, 0); //計算轉換後的長度
if (gbklen <= 0) else if (gbklen >= maxgbkstrlen) //判斷空間是否足夠
wcstombs(gbkstr, unicodestr, gbklen);
gbkstr[gbklen] = 0; //新增結束符
free(unicodestr);
return gbklen;
}int main(void)
c中實現utf8和gbk的互轉
cpp view plain copy include include include include include include include intcode convert char from charset,char to charset,char inbuf,size t inlen,...
C實現utf8與gbk互轉
在實現解析上傳後的csv檔案時,發現excel是gbk編碼,c解析的時候亂碼,翻資料找到這篇部落格 c和c 實現字元轉碼 在移植到arm上後,發現liconv函式通過cgi無法正常呼叫,從shell中是可以正常呼叫的,就很奇怪。然後今晚沒找到好的解決方法,就棄用這個函式了,直接用命令列的方式將檔案的...
UTF 8和GBK的區別
utf 8和gbk的區別 2009年06月09日 星期二 下午 02 00 gbk是國家標準gb2312基礎上擴容後相容gb2312的標準。gbk的文字編碼是用雙位元組來表示的,即不論中 英文本元均使用雙位元組來表示,為了區分中文,將其最高位都設定成1。gbk包含全部中文字元,是國家編碼,通用性比u...