天天看點

Unicode字元集和多字元集

兩個字元集的關系

由于各國語言的加入,ASCII已經不能滿足資訊交流的需要,是以,為了能夠表示其它國家的文字,各國在ASCII的基礎上制定了自己的字元集,它們正式的名稱應該是MBCS(Multi-Byte Chactacter System,即多位元組字元系統)。

兩個字元集相關類型的說明

類型說明 Unicode ANSI 通用類型
字元 WCHAR CHAR TCHAR
字元串指針 PWSTR LPSTR PTSTR
常量字元串指針 PCWSTR LPCSTR LPCTSTR

如何編寫符合ANSI和Unicode的應用程式?

(1) 将文本串視為字元數組,而不是chars數組或位元組數組。

(2) 将通用資料類型(如TCHAR和PTSTR)用于文本字元和字元串。

(3) 将顯式資料類型(如BYTE和PBYTE)用于位元組、位元組指針和資料緩存。

(4) 将TEXT宏用于原義字元和字元串。

(5) 執行全局性替換(例如用PTSTR替換PSTR)。

(6) 修改字元串運算問題。例如函數通常希望在字元中傳遞一個緩存的大小,而不是位元組。這意味着不應該傳遞sizeof(szBuffer),而應該傳遞(sizeof(szBuffer)/sizeof(TCHAR)。另外,如果需要為字元串配置設定一個記憶體塊,并且擁有該字元串中的字元數目,那麼請記住要按位元組來配置設定記憶體。這就是說,應該調用malloc(nCharacters *sizeof(TCHAR)),而不是調用malloc(nCharacters)。

如何對Unicode進行操作? 字元集 特性 執行個體

ANSI 操作函數以str開頭 strcpy

Unicode 操作函數以wcs開頭 wcscpy

MBCS 操作函數以_mbs開頭 _mbscpy

ANSI/Unicode 操作函數以_tcs開頭 _tcscpy(C運作期庫)

ANSI/Unicode 操作函數以lstr開頭 lstrcpy(Windows函數)

所有新的和未過時的函數在Windows2000中都同時擁有ANSI和Unicode兩個版本。ANSI版本函數結尾以A表示;Unicode版本函數結尾以W表示。Windows會如下定義:

#ifdef UNICODE

#define CreateWindowEx CreateWindowExW

#else

#define CreateWindowEx CreateWindowExA

#endif // !UNICODE

如何表示Unicode字元串常量? 字元集 執行個體

ANSI “string”

Unicode L“string”

ANSI/Unicode _T(“string”)或_TEXT(“string”)if( szError[0] == _TEXT(‘J’) ){ }

繼續閱讀