有關寬字元wchar_t編碼方式的問題
阿新 • • 發佈:2019-01-09
在工程檔案時,常常遇到字元亂碼的問題,查了下,歸結於寬字元wchar_t和窄字元char的區別。
簡單說下這兩者之間的區別:
1、char是8bit資料,能表示ASCII碼中前256個字元,包括前128個可見字元和後128個不可見字元。
2、wchar_t是因為char所能表示的字元數太少(256個)而應運而生的,它的長度可以8bit,16bit,32bit,長度是與不同平臺上的c庫相關的。其實這個長度是根據指定平臺上想要用的encoding編碼方式來設定的。
在win32 MSVC環境下,c庫中wchar_t的長度是2個byte,定義如下:
typedef unsigned short wchar_t; /* 16 bits */
wchar_t是按照UTF-16編碼方式設定的,但是wchar_t只要兩個位元組,所以它只能表示UTF-16的一個子集。wchar_t就是儲存的字元的unicode碼值的編碼值,在windows下就是unicode碼值的UTF-16編碼值:
在VS中,UNICODE編碼和ANSI編碼的區別如下:
wchar_t w1= L'中'; //Unicode 編碼
wchar_t w2= '中'; //Ansi編碼