//主要思想:先將一種編碼用multibytetowidechar函式變為unicode編碼,再用widechartomultibyte函式變為另一種編碼。
/*********************************
multibytetowidechar
一、函式功能:該函式對映乙個字串到乙個unicode字串。
二、函式原型:int multibytetowidechar(uint codepage, dword dwflags, lpcstr lpmultibytestr, int cchmultibyte, lpwstr lpwidecharstr, int cchwidechar);
三、引數說明:
1.codepage:指定執行轉換的編碼。常用的有cp_acp:ansi(gb*)、cp_utf8:utf-8
2.dwflags:一組位標記用以指出是否未轉換成預作或寬字元(若組合形式存在),是否使用象形文本替代控制字元,以及如何處理無效字元。
3.lpmultibytestr:指向將被轉換字串的字元。
4.cchmultibyte:指定由引數lpmultibytestr指向的字串中位元組的個數。如果這個值為-1,字串將被設定為以null為結束符的字串,並且自動計算長度。
5.lpwidecharstr:指向接收被轉換字串的緩衝區。
6.cchwidechar:指定由引數lpwidecharstr指向的緩衝區的位元組個數。若此值為零,函式返回緩衝區所必需的寬字元數,在這種情況下,lpwidecharstr中的緩衝區不被使用。
四、返回值:
1.如果函式執行成功,並且cchwidechar不為零,返回值是由lpwidecharstr指向的緩衝區中寫入的寬字元數;
2.如果函式執行成功,並且cchmultibyte為零,返回值是接收到待轉換字串的緩衝區所需求的寬字元數大小。
3.如果函式執行失敗,返回值為零。
五、注意: 指標lpmultibytestr和lpwidecharstr必須不一樣。
*****************************************/
/************************************
widechartomultibyte
一、函式功能:該函式對映乙個unicode字串到乙個多位元組字串。
二、函式原型:int widechartomultibyte(uint codepage, dword dwflags, lpwstr lpwidecharstr, int cchwidechar, lpcstr lpmultibytestr, int cchmultibyte, lpcstr lpdefaultchar, pbool pfuseddefaultchar );
三、引數說明:
1.codepage:指定執行轉換的編碼。
2.dwflags:一組位標記用以指出是否未轉換成預作或寬字元(若組合形式存在),是否使用象形文本替代控制字元,以及如何處理無效字元。
3.lpwidecharstr:指向將被轉換的unicode字串。
4.cchwidechar:指定由引數lpwidecharstr指向的緩衝區的字元個數。
5.lpmultibytestr:指向接收被轉換字串的緩衝區。
6.cchmultibyte:指定由引數lpmultibytestr指向的緩衝區最大值(用位元組來計量)。
7.lpdefaultchar:通常設為null。
8.pfuseddefaultchar:通常設為null。
四、返回值:
1.如果函式執行成功,並且cchmultibyte不為零,返回值是由 lpmultibytestr指向的緩衝區中寫入的位元組數;
2.如果函式執行成功,並且cchmultibyte為零,返回值是接收到待轉換字串的緩衝區所必需的位元組數。
3.如果函式執行失敗,返回值為零。
*****************************************/
#include #include //gbk編碼轉換到utf8編碼
int gbktoutf8(unsigned char * lpgbkstr,unsigned char * lputf8str,int nutf8strlen)
if(nutf8strlen < nretlen) //如果輸出緩衝區長度不夠則退出
nretlen = ::widechartomultibyte(cp_utf8,0,lpunicodestr,-1,(char *)lputf8str,nutf8strlen,null,null); //轉換到utf8編碼
if(lpunicodestr)
delete lpunicodestr;
return nretlen;
}// utf8編碼轉換到gbk編碼
int utf8togbk(unsigned char * lputf8str,unsigned char * lpgbkstr,int ngbkstrlen)
if(ngbkstrlen < nretlen) //如果輸出緩衝區長度不夠則退出
nretlen = ::widechartomultibyte(cp_acp,0,lpunicodestr,-1,(char *)lpgbkstr,nretlen,null,null); //轉換到gbk編碼
if(lpunicodestr)
delete lpunicodestr;
return nretlen;
}//使用這兩個函式的例子
int main()
else
fp = fopen("c:/gbk轉utf8.txt","wb"); //儲存到文字檔案
fwrite(lputf8str,nretlen,1,fp);
fclose(fp);
getchar(); //先去開啟那個文字檔案看看,單擊記事本的「檔案」-「另存為」選單,在對話方塊中看到編碼框變為了「utf-8」說明轉換成功了
nretlen = utf8togbk((unsigned char *)lputf8str,null,null); //再轉回來
printf("轉換後的字串需要的空間長度為:%d ",nretlen);
lpgbkstr = new char[nretlen + 1];
nretlen = utf8togbk((unsigned char *)lputf8str,(unsigned char *)lpgbkstr,nretlen);
if(nretlen)
else
fp = fopen("c:/utf8轉gbk.txt","wb"); //儲存到文字檔案
fwrite(lpgbkstr,nretlen,1,fp);
fclose(fp);
getchar(); //再去開啟文字檔案看看,發現編碼框又變為了「ansi」說明轉換成功了
ret0:
if(lpgbkstr)
delete lpgbkstr;
if(lputf8str)
delete lputf8str;
return 0;
}
以下是linux下的**,從big5到utf8的例子
#include #include #include #include #include #include #define size 1024*1024
int transcoding(char *fromcode,char *tocode,char *from,int from_len,char *to,int to_len)
//./test big5 utf-8 big5.txt utf8.txt
int main(int argc,char **argv)
字元編碼之間的轉換
在嚴格的ascii中,每個字元用7位元表示,一共規定了128個字元的編碼 unicode拓展自ascii字符集,使用全16位字符集,可以表示全世界上所有的書寫語言中可能用於電腦通訊的字元 象形文本和其他符號。但不支援一些古老的文字。utf 8是一種針對unicode的可變長寬字元編碼,又稱為萬國碼 ...
中文與ASCII之間的轉換
我們在開發使時常會用到資源檔案,這可能是為了多語言 國際化的需要,也可能是使用了國外開源專案的原因,這就需要將中文轉換為 ascii 編碼,或者將 ascii 轉換為中文,那麼我們就可以使用 jdk自帶的轉換工具 native2ascii for example no1 中文轉換為 ascii 編碼...
Python的中文編碼轉換問題
與伺服器進行資料交換時,尤其是資料中含有中文時,要注意中文的編碼問題。要選擇伺服器接受的編碼方式,否則會造成顯示亂碼。經驗 實驗室伺服器的資料庫,中文用utf 8編碼,但我提交的是gbk編碼的中文,結果出現亂碼 基本能解決大陸上的編碼問題。簡單解釋一下 首先判斷傳入的mes是否是unicode編碼,...