linux沒有widechartomultibyte,multibytetowidechar,我們通常...
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
printf("0x%08x ",wch[i]);
printf("/n");
return 0;
}還有呢,轉碼還可以使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下轉碼的資料,這裡比較全:
仔細讀,所有的問題基本都可以找到答案。
0 給主人留下些什麼吧!~~
iconv 函式轉碼
1.iconv 函式用於轉換不同的字元編碼。使用流程 iconv open iconv iconv close 2.在將 windows 1252 轉 utf 8 時,有些字元轉碼報錯 illegal byte sequence 原因是 windows 1252 中有些字元在 utf 8 中找不到對...
Linux 檔案轉碼
在實際操作中,經常會把linux的檔案拉取到本地,因為linux預設編碼是utf 8,而本地excel開啟的檔案是預設gbk,這時需要轉碼 在linux轉碼如下 使用如下命令 iconv f 原編碼 t 新編碼 filename o newfile檢視檔案編碼 使用file命令 file bclvz...
Linux下Base64轉碼解碼
編碼 echo n ceshi1111 base64 輸出 y2vzagkxmtex 解碼 echo n y2vzagkxmtex base64 d 輸出 ceshi1111 附 base64命令說明 使用 base64 編碼 解碼檔案或標準輸入輸出。w,在指定的字元數後自動換行 預設為76 0 為...