Linux utf8與gb2312轉換函式

2021-06-22 05:22:07 字數 1622 閱讀 9771

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