在windows下打開(kāi)一個(gè)記事本,保存文件,下面有四種編碼選擇。ANSI,也就是多字節(jié)字符集,在VC中也就是CHAR(char)字符串。Unicode,就是UTF16,在VC中也就是WCHAR(wchar_t)字符串。Unicode big endian ,就是UTF32,這種編碼用的比較少。UTF8,網(wǎng)頁(yè)上幾乎都是用UTF8,UTF8用1-4個(gè)字節(jié)來(lái)編碼所有的字符,英文只需要1個(gè) 字節(jié),中文需要3-4個(gè)字節(jié)。比起UTF16來(lái)說(shuō),UTF8這樣可以盡可能的節(jié)省網(wǎng)絡(luò)帶寬,因?yàn)樵诰W(wǎng)絡(luò)上傳輸?shù)淖址?,大部分以英文為主。UTF16至少是2個(gè)字節(jié),部分字符4個(gè)字節(jié)。 如果我們寫(xiě)一個(gè)VC程序,從獲取HTML網(wǎng)頁(yè)數(shù)據(jù),這些數(shù)據(jù)的編碼是UTF8的,獲取到我們VC程序中的CHAR字符數(shù)組中時(shí)就會(huì)發(fā)現(xiàn),英文可以正常顯示,中文全部亂碼了。因?yàn)槲覀兊腃HAR型字符串用的是ANSI編碼。要想把UTF8轉(zhuǎn)換為ANSI,一般有兩種方法。一種是手工寫(xiě)代碼實(shí)現(xiàn),百度上搜索可以發(fā)現(xiàn)很多資料,透徹了解這些字符集編碼后,可以手工來(lái)實(shí)現(xiàn)轉(zhuǎn)換,網(wǎng)上也有很多別人寫(xiě)好的轉(zhuǎn)換函數(shù)。一種方法就是借助第三方函數(shù)庫(kù)。由于我們?cè)趙indows平臺(tái)下編寫(xiě)程序,我們可以使用API函數(shù)來(lái)轉(zhuǎn)換MultiByteToWideChar和WideCharToMultiByte。使用這個(gè)函數(shù),我們得進(jìn)行兩次轉(zhuǎn)換,先用MultiByteToWideChar把UTF8編碼的CHAR字符串轉(zhuǎn)換成WCHAR字符串,第一個(gè)參數(shù)要注明我們要轉(zhuǎn)換的代碼頁(yè)為CP_UTF8,即UTF8的意思。然后用WideCharToMultiByte吧WCHAR字符串轉(zhuǎn)換成CHAR字符串,第一個(gè)參數(shù)使用936,936代碼頁(yè)的意思是簡(jiǎn)體中文。有關(guān)代碼頁(yè)的知識(shí)可以百度百科一下。 下面貼出我寫(xiě)的兩個(gè)ANSI與UTF8互轉(zhuǎn)的函數(shù)。參數(shù)為MFC中的CString字符串,如果要傳入C樣式的字符數(shù)組型字符串,只需稍加修改即可。 [cpp] view plaincopy
[cpp] view plaincopy
|
|
來(lái)自: herowuking > 《VC》