为什么printf可以打印中文,而wprintf却一定要setlocale才能正确打印?

simonter02 2012-03-31 06:43:57
我的VC工程不论是MBCS还是Unicode,发现printf总是能正确打印char*表示的中文。

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

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

大侠解释一下吧 !

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也能工作?
...全文
96 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jim_King_2000 2012-03-31
  • 打赏
  • 举报
回复
Windows的宽字符流做的比较差。它总是会做转换,把宽字符转换为locale指定的多字节字符。
jixingzhong 2012-03-31
  • 打赏
  • 举报
回复
使用的字符集是不一样的。
vcf_reader 2012-03-31
  • 打赏
  • 举报
回复
printf 用2个8位表示汉字,所以直接用
wprintf 采用1个16位表示全世界的字,所以要指定语言

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧