读书人

为什么printf可以打印中文,而wprintf却

发布时间: 2012-04-07 17:31:50 作者: rapoo

为什么printf可以打印中文,而wprintf却一定要setlocale才能正确打印?
我的VC工程不论是MBCS还是Unicode,发现printf总是能正确打印char*表示的中文。

而wprintf打印wchar_t*的中文,必须要先设置setlocal(LC_ALL,"chs")才行,否则打印一堆乱码。

我的问题是:
(1)为什么printf能正常打印中文,而不是按字节打印出一堆ascii字符。
(2)wprintf既然是打印L()包裹的中文,那么它为什么不能工作?我当前就是中文系统啊,本机运行,没有更换到英文系统上。那么还要在此之前setlocale我总感觉有点多次一举啊。

大侠解释一下吧 !

C/C++ code
   setlocale(LC_ALL,"chs");   string s="你好abc";   wstring ws=L"你好abc";   printf("%s\n",s.c_str());   wprintf(L"%s\n",ws.c_str());//为什么要设置locale才能正确的wprintf? 已经知道了是宽字符的,为何还要设置代码页? 为什么string/printf就不需要设置locale也能工作?


[解决办法]
printf 用2个8位表示汉字,所以直接用
wprintf 采用1个16位表示全世界的字,所以要指定语言
[解决办法]
使用的字符集是不一样的。
[解决办法]
Windows的宽字符流做的比较差。它总是会做转换,把宽字符转换为locale指定的多字节字符。

读书人网 >C++

热点推荐