1. 程式人生 > >有關寬字元wchar_t編碼方式的問題

有關寬字元wchar_t編碼方式的問題

在工程檔案時,常常遇到字元亂碼的問題,查了下,歸結於寬字元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編碼