关于WCHAR转化为char的问题
#include "stdafx.h"
#include <atlbase.h>
char* WSTRToAnsi(WCHAR* Msg)//把wchar*转换称char*
{
int len = wcstombs(NULL, Msg, 0);
char* buf = new char[len+1];
wcstombs(buf, Msg, len);
buf[len] = 0;
return buf;
}
int main(int argc, char* argv[])
{
WCHAR* d=L"速度";//此处如果是英文,可以成功,如果是汉字,则失败
char* s =WSTRToAnsi(d);
printf("%s\n",s);//?
return 0;
}
[解决办法]
WCHAR* d=L "速度 ";
——对于这句话的处理,不同的编译器可能会不一样。
大部分编译器中,如果你的源文件不是Unicode格式的,那么d所指向的字符串并不会被自动转换成Unicode格式。
[解决办法]
//#include "stdafx.h " #include "tchar.h"//#include <iostream.h>#include <LOCALE.h>#include <atlbase.h> //using namespace std;char* WSTRToAnsi(WCHAR* Msg)//把wchar*转换称char* { int len = wcstombs(NULL, Msg, 0); char* buf = new char[len+1]; wcstombs(buf, Msg, len); buf[len] = 0; return buf; } int main() { WCHAR* d=L"速度";//此处如果是英文,可以成功,如果是汉字,则失败 // cout.imbue(locale("chs"));///这样写可以 setlocale(LC_ALL,"chs");///////////////////////本地化 char* s =WSTRToAnsi(d); printf( "%s\n ",s);//? return 0; }
[解决办法]
要保證源文件是 Unicode 的——不是每一個編譯器都支持的。