linux下gb2312與utf8相互轉換直接有介面呼叫的,呼叫的介面iconv_open
#include
iconv_t iconv_open (const
char* tocode, const
char* fromcode);
下面看下測試程式:
#include
#include
#include
#include
//iinlen的長度不包括\0,應該用strlen。返回值是處理後的sout長度
static
int utf8togb2312(char *sout, int imaxoutlen, const
char *sin, int iinlen)
size_t isrclen=iinlen;
ret = iconv(cd, &pin,&isrclen, &pout,&ileftlen);
if (ret == (size_t) - 1)
iconv_close(cd);
return (imaxoutlen - ileftlen);
}
//iinlen的長度不包括\0,應該用strlen。返回值是處理後的sout長度
static
int gb2312toutf8(char *sout, int imaxoutlen, const
char *sin, int iinlen)
size_t isrclen=iinlen;
ret = iconv(cd, &pin,&isrclen, &pout,&ileftlen);
if (ret == (size_t) - 1)
iconv_close(cd);
return (imaxoutlen - ileftlen);
}
int main(void)
;
int ilen = gb2312toutf8(pszdst, 50, pszori, strlen(pszori)); // gb2312toutf8
printf("ilen:%d,pszdst=%s\n", ilen, pszdst);
printf("------------------!\n");
char pszgbdst[50] = ;
int inewlen = utf8togb2312(pszgbdst, 50, pszdst, ilen); // utf8togb2312
printf("inewlen:%d,pszgbdst=%s\n", inewlen, pszgbdst);
return 0;
}
輸出結果:
strlen:12
18,涓枃瀛楃嫻嬭瘯
-----------
12,中文字元測試
可以看出,utf8格式下,乙個中文字元佔三個位元組;而gb2312下佔兩個位元組。
注意:在開發板上轉換時記得要帶上iconv庫.....
c語言中關於utf 8編碼轉換為gb2312的問題
在網上查到如下 問題是 輸出發現gb2312 utf8是沒問題的,但是utf8轉為gb2312時發現只轉換了英文部分,漢字部分並沒有轉換,期待高手釋疑!include include include include define outlen 255 main 轉換 從一種編碼轉為另一種編碼 int...
UTF 8與GB2312之間的互換
winapi的兩個函式 widechartomultibyte multibytetowidechar。int multibytetowidechar uint codepage,code page dword dwflags,character type options lpcstr lpmult...
字元編碼中utf 8與gb2312
在寫頁面的時候,常常遇到字元編碼的問題,糾結於 utf 8或是gb2312,也就是charset屬性。如果外部檔案中的字元編碼與主檔案的編碼方式不同,那我們就要用到charset屬性。你比如說php檔案本身就是必須是utf 8編碼,輸出頭header content type text html c...