linux下寬位元組和多字元之間的轉換

2021-06-17 18:09:47 字數 1619 閱讀 3808

linux下面的沒有命名為 widechartomultibyte() 和 multibytetowidechar() 函式,widechartomultibyte,multibytetowidechar是windows下的函式,在linux下也有類似的兩個函式:

mbstowcs()

wcstombs()

值得注意的是:

size_t mbstowcs(wchar_t *wcstr,const char *mbstr,size_t count);

這個函式的第三個引數count,大小一定要是mbstr長度的2倍,否則出來的中文也會是亂碼

測試一下:

setlocale(lc_all,"zh_cn.gb18030");

wchar_t wcstr[20] = l"字元測試123abc";

int len = wcslen(wcstr)+1;

printf("len = %d /n",len);

for(int i = 0; i < len; i++)

printf("0x%08x ",wcstr[i]);

printf("/n");

char str[55] = ;   

int n = wcstombs(str,wcstr,55);

if(-1 == n)

printf("n = %d/n",n);

for(int i = 0; i < n+1; i++)

printf("0x%08x ",str[i]);

printf("/n");   

wchar_t wch[50]=;

int m = mbstowcs(wch,str,n);    

if(m == -1)

printf("m = %d/n",m);

for(int i =0; i還有呢,轉碼還可以使iconv函式族,包含以下三個函式:

iconv_t iconv_open(const char *tocode, const char *fromcode);

size_t iconv(iconv_t cd,char **inbuf,size_t *inbytesleft,char **outbuf,size_t *outbytesleft);

int iconv_close(iconv_t cd);

測試一下:

#include

#include

#include

#define buflen 256

char outbuf[buflen];

char inbuf[buflen] = "characters convertion";

int main()

retsize = iconv(cd, &pin, (size_t *)&inlen, &pout, (size_t *)&outlen);

if((size_t)-1 == retsize)

if(outlen > 0)

iconv_close(cd);

return 0; }另外

關於linux下轉碼的資料,這裡比較全:

仔細讀,所有的問題基本都可以找到答案。

寬字元和多位元組字元(mbtowc wctomb)

c 語言原本是在英文環境中設計的,主要的字符集是7 位的ascii 碼。從此開始,8 位的byte 位元組 變成最常見的字元編碼單位,但是國際化軟體必須能夠表示不同的字元,而這些字元數量龐大,無法使用乙個位元組編碼,於是世界上使用各式 各樣多位元組的字元編碼集合已經有數十年了,比如用來表示 非拉丁字...

多位元組 與 寬字元 之間的轉換

檢視文章 寬字元轉多位元組,多位元組轉寬字元 2007 04 21 21 32 多位元組轉寬字元 cstring strtext 字串 int nsize int ncharsize multibytetowidechar cp acp,mb precomposed,strtext,nsize,nu...

關於寬位元組和多位元組之間的轉換

之前也遇到好多次亂碼問題,但都沒有整理過,每次都是重新翻閱資料,現在做個整理歸納,方便自己或者其他朋友以後查閱瀏覽 多餘廢話就不說了,直接貼 char convertgbktoutf8 const char pszgbk memset wszutf8,0,len 2 2 multibytetowid...