为什么使用Unicode? | ||
可以很容易地在不同语言之间进行数据交换。
可以实现同一个二进制.exe文件或DLL文件支持多种语言。 可以提高应用程序的运行效率。Windows 2000是使用Unicode从头进行开发的,如果调用任何一个Windows函数并给它传递一个ANSI字符串,那么系统首先要将字符串转换成Unicode,然后将Unicode字符串传递给操作系统。如果希望函数返回ANSI字符串,系统就会首先将Unicode字符串转换成ANSI字符串,然后将结果返回给你的应用程序。进行这些字符串的转换需要占用系统的时间和内存。通过从头开始用Unicode来开发应用程序,就能够使你的应用程序更加有效地运行。 Windows CE 是使用Unicode的一种操作系统,完全不支持ANSI Windows函数。 Windows 98 只支持ANSI,只能为ANSI开发应用程序。 |
区分ANSI和Unicode函数 | ||
首先,函数的参数及其返回值的数据类型不同。如:
char *strcpy( char *strDestination, const char *strSource ); wchar_t *wcscpy(的 wchar_t *strDestination, const wchar_t *strSource ); unsigned char *_mbscpy( unsigned char *strDestination, const unsigned char *strSource ); wcscpy and _mbscpy are wide-character and multibyte-character versions of strcpy. The arguments and return value of wcscpy are wide-character strings; those of _mbscpy are multibyte-character strings. These three functions behave identically otherwise. Windows定义的Unicode数据类型: WCHAR Unicode字符,PWSTR 指向Unicode字符串的指针,PCWSTR 指向一个恒定的Unicode字符串的指针 对应的ANSI数据类型为CHAR,LPSTR和LPCSTR。 ANSI/Unicode通用数据类型为TCHAR,PTSTR,LPCTSTR。 其次,函数命名规则不同,如: ANSI 操作函数以str开头 strcpy Unicode 操作函数以wcs开头 wcscpy MBCS 操作函数以_mbs开头 _mbscpy 所有新的和未过时的函数在Windows2000中都同时拥有ANSI和Unicode两个版本。ANSI版本函数结尾以A表示;Unicode版本函数结尾以W表示。Windows会如下定义: #ifdef UNICODE #define CreateWindowEx CreateWindowExW #else #define CreateWindowEx CreateWindowExA #endif // !UNICODE |