为什么设置全局的locale会影响cout输出中文?

alexdboy 2009-01-08 07:55:25
平台为Windows XP Pro和VC2005。代码如下
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
#include <iostream>
#include <string>

using std::cout;
using std::endl;
using std::locale;
using std::string;

int main(int argc, char *argv[])
{
string str = "a严a";
//输出全局和cout的locale名称
cout << locale().name() << endl;
cout << cout.getloc().name() << endl;
cout << "===========================" << endl;
printf(str.c_str());
cout << endl << str << endl;
cout << "===========================" << endl;

//C++方式设置全局locale
locale::global(locale(""));

//输出全局和cout的locale名称
cout << locale().name() << endl;
cout << cout.getloc().name() << endl;

cout << "===========================" << endl;
printf(str.c_str());
cout << endl << str << endl;
return 0;
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

输出结果为
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
C
C
===========================
a严a
a严a
===========================
Chinese_People's Republic of China.936
C
===========================
a严a
a请按任意键继续. . .
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

程序默认的locale是“C”,这时使用printf和cout都能输出中文。在使用了locale::global(locale(""))把程序的全局的locale改成系统默认的“Chinese_People's Republic of China.936”后,printf还是照样输出中文,但cout却失败了(只输出了a)。这是为什么呢?cout的locale应该是不受全局locale的影响的(通过输出cout.getloc().name()也证实了这一点)。我还试了单独把cout的locale改成系统默认的“Chinese_People's Republic of China.936”,保持全局的locale不变,cout可以正常输出中文。可见“Chinese_People's Republic of China.936”这个locale并不是不合适的。
后来我把工程从dubug改成release,运行后出来的结果就正常了
输出结果
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
C
C
===========================
a严a
a严a
===========================
Chinese_People's Republic of China.936
C
===========================
a严a
a严a
请按任意键继续. . .
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

虽然这个问题算是暂时解决了,可心里总是放不下。想请各位大侠给解释一下该问题本质上可能是由什么引起的。谢谢。
...全文
363 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangmingfu010 2010-01-10
  • 打赏
  • 举报
回复
mark
alexdboy 2009-01-11
  • 打赏
  • 举报
回复
也许只是VC2005库的bug吧。多谢楼上的。
nineforever 2009-01-08
  • 打赏
  • 举报
回复
Vista,VS2008,debug输出
C
C
===========================
a严a
a严a
===========================
Chinese (Simplified)_People's Republic of China.936
C
===========================
a严a
a严a

65,211

社区成员

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

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