Unicode的全部字符都佔用兩個字節。
1.C運行庫對Unicode的支持
在string.h中定義了一個wchar_t類型代替char類型來支持Unicode字符串:
typedef unsigned short wchar_t;
在string.h中定義了一些以wcs開頭的函數來支持Unicode,下面前面爲ANSI C字符串函數,後面爲Unicode函數:
char *strcat(char *,const char *);
wchar_t *wcscat(wchar_t *,const wchar_t *);
char *strchar(char *,const char *);
wchar_t *wcschr(wchar_t *,const wchar_t *);
char *strcmp(char *,const char *);
wchar_t *wcscmp(wchar_t *,const wchar_t *);
char *strlen(char *,const char *);
wchar_t *wcslen(wchar_t *,const wchar_t *);
可以運用頭文件TChar.h建立單個源代碼文件,使用特定的宏,通過判斷是否定義了_UNICODE,來將這些宏擴展爲ANSI版本的函數或UNICODE版本的函數。如果需要定義一個字符,使用TCHAR類型。如果定義了_UNICODE,那麼THCAR聲明爲如下形式:
typedef wchar_t TCHAR;
如果沒有定義_UNICODE,那麼TCHAR會聲明爲如下形式:
typedef char TCHAR;
定義字符數組如下:
TCHAR szString[100];
如果需要將字符串字面值定義爲UNICODE,那麼可以在字符串前加上大寫字母L,例如:
TCHAR *pt=L"mystring";
但是有時候,我們希望系統能夠通過是否定義_UNICODE來智能的將字符串翻譯爲ANSI或UNICODE類型,那麼可以使用宏_TEXT。如果定義了_UNICODE,那麼宏定義形式如下:
#define _TEXT(x) L ## x
如果沒有定義_UNICODE,那麼宏_TEXT定義如下形式:
#define _TEXT(x) x
因此,上面可改爲:
TCHAR *pt=_TEXT("mystring");
2.windows定義的UNICODE數據類型
在windows中定義的UNICODE數據類型如下:
數據類型 |
說明 |
WCHAR |
用於定義UNICODE字符 |
PWSTR |
指向UNICODE字符串的指針 |
PCWST |
指向一個恆定的UNICODE字符串的指針 |
windows頭文件中也定義了ANSI/UNICODE通用的數據類型PTSTR和PCTSTR,通過判斷是否定義了UNICODE宏,來指定PTSTR和PCTSTR的字符集類型。注意這裏UNICODE宏沒有下劃線。_UNICODE宏用於C運行期頭文件,UNICODE宏用於windows頭文件。
3.windows中的ANSI函數和UNICODE函數
windows中的函數一般都有ANSI版本的函數和UNICODE版本的函數。ANSI版本版本的函數後面以A字母結束,如CreateWindowExA;UNICODE版本的函數以W結束,如CreateWindowExW。
在windows中提供了一些字符串操作系統函數,如StrCat、StrChr、StrCmp、StrCpy等,這些函數都有ANSI和UNICODE版本的函數,如StrCatA何StrCatW,可以通過判斷是否使用了UNICODE宏來具體這些函數。要使用這些函數,要包含頭文件ShlWApi.h。
4.windows字符串函數
函數 | 說明 |
CharLower | 轉換成大寫字符串 |
CharUpper |
轉換成小寫字符串 |
CharLowerBuff | 轉換成大寫字符串 |
CharUpperBuff | 轉換成小寫字符串 |
IsCharAlpha | 判斷是否是字母 |
IsCharAlphaNumeric | 判斷是否是字母和數字 |
IsCharLower | 判斷是否死小寫字母 |
IsCharUpper | 判斷是否是大寫字母 |
MutilByteToWideChar | 將多字節字符串轉換成寬字符串 |
WideCharToMutilByte | 將寬字符串轉換成多字節字符串 |