转载:http://bbs.csdn.net/topics/100075810 八楼的答案
如果你使用VC2002(2003更好)或以上的话,CString转WCHAR简单的很:
1,假设你的程序是MBCS编译,并且不打算兼容UNICODE的话,那么:
{
USES_CONVERSION;
CString sText = "text string";
WCHAR wszWideString[N];
wcscpy(wszWideString, CA2CW(sText));
}
2,假设你的程序是UNICODE编译,或者MBCS、UNICODE兼容的话,那么:
{
USES_CONVERSION;
CString sText = _T("text string");
WCHAR wszWideString[N];
wcscpy(wszWideString, CT2CW(sText));
}
所以,你应该到MSDN里查询如下关键字即可:
1, USES_CONVERSION
2, CA2CW (会看到一族 X2X 函数)
VC2002里的这族函数在类型转换上有些缺陷,但是调用时自行强制后就没问题了,2003里彻底没有缺陷了。
这些要归功于升级改版后的ATL。
最后,这些函数归根到底是基于API MultiByteToWideChar/WideCharToMultiByte的,在Windows中是需要安装有相应的码表才能正确转换的。
比如说,你的程序是MBCS编译的,你的 CHAR[] 字符串里的中文是GB2312编码的,在纯英文Windows下(纯英文是指没有安装中文码表时),CA2CW()或MultiByteToWideChar()是都不能正确转换的!
所以说,如果你只是被迫需要兼容一些第三方API调用,可以使用一下上述转换方法。但是对于跟语言文字、字符串息息相关的程序模块来说,要想走向世界,一定要用UNICODE编译!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步