c中實現utf8和gbk的互轉

2021-08-18 10:59:55 字數 2582 閱讀 2386

[cpp]view plain

copy

#include 

#include 

#include 

#include 

#include 

#include 

#include 

intcode_convert(

char

*from_charset, 

char

*to_charset, 

char

*inbuf, 

size_t

inlen,  

char

*outbuf, 

size_t

outlen)   

intu2g(

char

*inbuf, 

size_t

inlen, 

char

*outbuf, 

size_t

outlen)   

intg2u(

char

*inbuf, 

size_t

inlen, 

char

*outbuf, 

size_t

outlen)   

intmain(

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

[cpp]view plain

copy

#include 

#include 

#include 

#include 

#include 

#include 

#include 

/*** description: 實現由utf8編碼到gbk編碼的轉換

** input: gbkstr,轉換後的字串;  srcstr,待轉換的字串; maxgbkstrlen, gbkstr的最

大長度* output: gbkstr

* returns: -1,fail;>0,success**/

intutf82gbk(

char

*gbkstr, 

const

char

*srcstr, 

intmaxgbkstrlen)   

//首先先將utf8編碼轉換為unicode編碼

if(null == setlocale(lc_all, 

"zh_cn.utf8"

)) //設定轉換為unicode前的碼,當前為utf8編碼

intunicodelen = 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

intgbklen = 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的互轉

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

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