兩個字元集的關系
由于各國語言的加入,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’) ){ }