c中實現utf8和gbk的互轉

2021-07-05 03:59:24 字數 2007 閱讀 4660

#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-8

zh_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...