- C运行库的Unicode支持
char *strchr( const char *str, int c );
wchar_t *wcschr( const wchar_t *str, wchar_t c );
int strcmp( const char *string1,const char *string2 );
int wcscmp(const wchar_t *string1,const wchar_t *string2
);
char *strcpy(char *strDestination,const char *strSource
);
wchar_t *wcscpy(wchar_t *strDestination,const wchar_t *strSource );
size_t strlen( const char *str);
size_t wcslen( const wchar_t *str );
标准的ANSI C字符串函数以及对应的Unicode函数。 wchar_t *wcschr( const wchar_t *str, wchar_t c );
int strcmp( const char *string1,const char *string2 );
int wcscmp(const wchar_t *string1,const wchar_t *string2
);
char *strcpy(char *strDestination,const char *strSource
);
wchar_t *wcscpy(wchar_t *strDestination,const wchar_t *strSource );
size_t strlen( const char *str);
size_t wcslen( const wchar_t *str );
2.TChar.h
<Tchar.h>主要是为了帮助实现ANSI/Unicode通用源代码文件的编写。主要由一系列的宏组成,如果定义了_UNICODE宏,当进行源码编译时,宏引用wcs系列的函数,否则应用str系列的函数。在vs 2008带的头文件中,TCHAR的定义如下:
typedef wchar_t WCHAR;
typedef WCHAR TCHAR, *PTCHAR;
VC++的编译器将所有的字符串默认为ANSI字串,而不是Unicode字符串。为了生成一个Unicode字符串,需要如下定义:
typedef WCHAR TCHAR, *PTCHAR;
TCHAR *szError=L"Error";
一个字符串前大写的L提示编译器,该字符串应编译为一个Unicode字符串。也可以使用Tchar.h重定义的宏_TEXT:
#define __T(x) L ## x
#define _TEXT(x) __T(x)
3.Windows下程序符合ANSI和Unicode的一些编程规范
#define _TEXT(x) __T(x)
- 将文本字符串看做字符数组,而不是字符型数据数组(??什么意思)或者字节数组;
- 对于文本字符和串使用通用数据类型(如TCHAR和PTSTR);
- 对字节、字节指针和数据缓冲区使用显式数据类型(如BYTE和PBYTE);
- 对文本字符和字符串使用TEXT宏;
- 执行全局替换(例如用PTSTR替换PSTR);
- 修改字符串运算问题。
windows提供了一些支持Unicode的函数,这些函数和C运行库作用略有不同。具体的有lstrcat、lstrcmp、lstrcmpi、lstrcpy、lstrlen等
5.CompareString函数
int CompareString(LCID Locale, DWORD dwCmpFlags, LPCTSTR lpString1, int cchCount1, LPCTSTR lpString2, int cchCount2 );
各个参数的含义:
Locale,用来识别具体的语言种类。本函数使用LCID,通过检查使用于特定语言的字符的意义来比较两个字符串。
dwCmpFlags是比较标志,可以用来控制是否检查大小写等条件。
lpString1,lpString2分别是两个要比较的字符串。
cchCount1,cchCount2分别是他们的长度。如果为-1,则函数假定字符串以0结尾。
6.其他对于宽字符进行操作的windows函数
这些函数有CharLower、CharUpper、CahrLowerBuff、CharUpperBuff、IsCharAlpha、IsCharAlphaNumberic、IsCharLower、IsCharUpper等,具体可以看msdn。