关于Unicode的小知识

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

你可能感兴趣的:(关于Unicode的小知识)