vs中ANSI编码和UNICODE编码及二者的兼容性问题

来源:互联网 发布:广东11选5数据360遗漏 编辑:程序博客网 时间:2024/05/16 17:03

ANSI编码的字符集是多字符集,也就是每个字符的编码宽度不相等。

UNICODE编码的字符集是宽字符集,每个字符的编码都是两个字符。

有些操作系统仅支持多字符集,有些操作系统仅支持宽字符集,当然更多的操作系统是两种字符集都支持。为了兼容两种字符集,vs编译器为使用宏定义的方法来选择编译成多字符集还是宽字符集,下面分别介绍:

1.多字符集(ANSI)

字符型是char    const char*型是LPCSTR

对应的一些字符串相关函数:MessageBoxA(),strcpy(),strcat(),strlen()  (注:以str开头)

2.宽字符集(UNICODE)

字符型是wchar_t    const char*型是LPCWSTR

对应的一些字符串相关函数:MessageBox(),wcscpy(),wcscat(),wcslen();  (注:以wcs开头)

3.兼容字符集

兼容字符集要包含头文件<tchar.h>

字符型是TCHAR

如果是多字符型编译,就把宏展开成char;如果是宽字符集编译,就把宏展开成wchar_。

对于const char*要放在_T()宏定义中。比如:_T("Hello World!")。

那么如果选择了多字符编译,就把宏展开成"Hello World!";如果是宽字符编译,就把宏展开成L"Hello World!"

对应的一些字符集相关函数:MessageBox(),

_tcscpy(),_tcscat(),_tcslen()  (注:以_tcs开头,是C运行时库)

或者lstrcpy(),lstrcat(),lstrlen()  (注:以lstr开头,是Windows函数)。

兼容字符集的宏定义在头文件<tchar.h>中,部分代码如下所示:

#ifdef __UNICODE    #define _tcslen  wcslen    #define TCHAR wchar_t    #define LPTSTR wchar_t*    #define _T(x)  L##x#else    #define _tcslen  strlen    #define TCHAR char    #define LPTSTR char*    #dfine   _T(x)    x#endif



1 0
原创粉丝点击