1: 首先更改项目属性为多字节字符集.
2: 对于所有 L"字符串", 去掉L, 或改为=> _T("字符串")
ps1: _T是个自动替换的宏, 可以根据编译条件的不同, 替换成不同的东西.
ps2:若想使用_T,要先包含<tchar.h>文件
3: 替换所有的 WCHAR 为 TCHAR
4: 替换所有的Unicode函数为非Unicode函数 eg _wsplitpath_s => _splitpath_s
ps1: 最好使用那些能够根据编译条件自动替换的函数.
想所有的windowsAPI, 他都提供了两个版本. 可以根据编译条件自动替换
5: 对于那些仅提供Unicode版本的函数, 那么就只要修改我们的参数以适应.
eg: CImage::FromFile( CString str )=>CImage::FromFile( CString str)
==> eg: CImage::FromFile( CString str )=>CImage::FromFile( CString str.AllocSysString() )
6: 有个MultiChar***的函数. 也可以把多字节字符转换为unicode字符.
PS :多字节字符集MBCS的含义是: 对于ANSI字符, 仅占用一个字节, 对于非ANSI字符, 比如中文,日文, 都占用两个字节.
由于ANSI字符有128个, 所以, ANSI字符的bit最高位为0, 当bit最高位为1时, 就表示是个双字节字符了.
多字节字符集有时也称为 ANSI字符. 这是因为 MSDC兼容ANSI的表示.
PS2: 对于Unicode字符串, 结尾符为0x0000, 对于ansi字符串结尾符为0x00, 对于MBCS,结尾福为 0x00(这个0x00是ANSI的一个字符, MSCB肯定兼容了)
对于 char * pStr = "ddd中";
ANSI函数 strlen: 返回 5
MBCS函数 _mbslen: 返回 4, 它能识别到中是一个字符(双字节)
UNICODE函数 wcslen: 报错, 无法将char*类型转化为 w_char*类型!!!
Q UNICODE字符串如何显示
A
如果程序定义了_UNICODE宏直接用
WCHAR *str=L"unicodestring";
TextOut(0,0,str);
否则就需要转换类型
#include <comdef.h>
WCHAR *str=L"unicodestring"; <