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头文件,