Unicode是Apple和Xerox公司於1988年建立的技術標準,其目的是爲了能夠表示各種語言中的字符(漢語使用256個字符進行表示是遠遠不夠的)
Unicode就是字符串中的所有字符都是16位的(寬字符)。這樣,對於字符的編碼就有65536個。可以適應各種語言的編碼要求。
以下是Unicode字符的分配:
0 0 0 0 - 0 0 7 F A S C I I 0 3 0 0 - 0 3 6 F 通用區分標誌
0 0 8 0 - 0 0 F F 拉丁文1字符 0 4 0 0 - 0 4 F F 西裏爾字母
0 1 0 0 - 0 1 7 F 歐洲拉丁文 0 5 3 0 - 0 5 8 F 亞美尼亞文
0 1 8 0 - 0 1 F F 擴充拉丁文 0 5 9 0 - 0 5 F F 西伯萊文
0 2 5 0 - 0 2 A F 標準拼音 0 6 0 0 - 0 6 F F 阿拉伯文
0 2 B 0 - 0 2 F F 修改型字母 0 9 0 0 - 0 9 7 F 梵文
Window2000即支持Unicode也支持ANSI
Window98只支持ANSI,對於Unicode編程比較麻煩
Window CE只支持Unicode;
COM接口中的方法只支持Unicode;
MS爲Unicode設計了專門的Windows API,只需要定義兩個宏(UNICODE和_UNICODE)就可以實現Unicode和ANSI程序的轉換。
標準C定義了寬字符類新:typedef unsigned short wchar_t;
一些標準C的ANSI字符串函數也做了相應的補充來支持Unicode,具體如下:
char* strcat(char*,const char*); wchar_t* wcscat(wchar_t*,const wchar_t*);
char* strchr(char*,const char*); wchar_t* wcschr(wchar_t*,const wchar_t*);
int strcmp(const char*,const char*);int wcscmp(const wchar_t*,const wchar_t*);
char* strcpy(char*,const char*); wchar_t wcscpy(wchar_t*,const wchar_t*);
size_t strlen(const char*); size_t wcslen(const wchar_t*);
要創建同時爲UNSI和Unicode編譯的單個源文件必須包含TChar.h文件,而不是String.h文件。
要定義一個UNSI和Unicode通用字符串,需要使用TCHAR數據類型,當定義_UNICODE時,TCHAR的定義爲:typedef wchar_t TCHAR;否則其定義爲:typedef char TCHAR;
要給一個TCHAR類型的字符串指針爭取賦值則使用_TEXT宏,當定義了_UNICODE時,_TEXT的定義爲:#define _TEXT(x) L##x,否則其爲:#define _TEXT(x) x;
_UNICODE宏用於C運行期頭文件,UNICODE宏用於Windows頭文件
Windows中的UNSI和Unicode函數也時通過宏替換來實現的,當定義UNICODE時,使用寬字符函數,否則使用ANSI函數;
儘量使用windows字符串函數,因爲他們有可能已經被其他應用程序調用從而已經裝載進了RAM,所以速度會快些,而要使用這些函數,必須包含:ShlWApi.h頭文件,