_tprintf
场景:_tprintf的一个有关问题,打印出乱码,为何
_tprintf的一个问题,打印出乱码,为何?
下面这个程序,在我的中文版win7上面编译VC2010,
工程属性字符集是Not Set(AnSI)的时候,运行输出是:
你好,`O}Y
你好,`O}Y
????????,??
请按任意键继续. . .
在Unicode工程属性,运行输出:
你好,`O}Y
????????,??
????????,??
请按任意键继续. . .
在MBCS工程属性,运行输出:
你好,`O}Y
你好,`O}Y
????????,??
我的问题是:
(1)为什么wprintf的输出总是乱码? 我知道Unicode工程属性的时候,_tprintf等同于wprintf
(2)为什么ANSI工程属性和MBCS工程属性,结果是一样的? 那么ANSI属性和MBCS属性,到底区别在哪里,我看不出来啊!
------解决方案--------------------
前面加一句
_tprintf的一个问题,打印出乱码,为何?
下面这个程序,在我的中文版win7上面编译VC2010,
- C/C++ code
#include<string> #include<tchar.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]){ string s="你好"; wstring ws=L"你好"; printf("%s,%s\n",s.c_str(),ws.c_str()); _tprintf(_T("%s,%s\n"),s.c_str(),ws.c_str()); wprintf(L"%s,%s\n",s.c_str(),ws.c_str()); return 0; }
工程属性字符集是Not Set(AnSI)的时候,运行输出是:
你好,`O}Y
你好,`O}Y
????????,??
请按任意键继续. . .
在Unicode工程属性,运行输出:
你好,`O}Y
????????,??
????????,??
请按任意键继续. . .
在MBCS工程属性,运行输出:
你好,`O}Y
你好,`O}Y
????????,??
我的问题是:
(1)为什么wprintf的输出总是乱码? 我知道Unicode工程属性的时候,_tprintf等同于wprintf
(2)为什么ANSI工程属性和MBCS工程属性,结果是一样的? 那么ANSI属性和MBCS属性,到底区别在哪里,我看不出来啊!
------解决方案--------------------
前面加一句
- C/C++ code
_tsetlocale ( LC_ALL, TEXT("chs"));
------解决方案--------------------
ANSI工程属性和MBCS工程属性一样
windows控制台不支持unicode,wprintf实际上是把你给的字符串转成ansi再输出