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