相同的区域设置,不同的输出

时间:2013-04-11 02:24:23

标签: c++ utf-8 locale cout

我尝试将UTF-8字符串打印到Windows控制台。控制台的代码页设置为65001(utf-8),字体设置为lucida控制台,c ++源文件编码为utf-8而不是bom。请考虑以下代码:

#include<iostream>
#include<locale>
#include<clocale>

int main(int narg, char** arg){
    using namespace std;
    cout<<"C++ locale: "<<cout.getloc().name()
        <<"\nC locale: "<<setlocale(LC_ALL, 0)<<"\n";
    cout<<"中文\n";
    printf("中文\n");
    return 0;
}

输出结果为:

C++ locale: C
C locale: C
������
中文

有人可以解释并提供解决方案(使c ++和c具有相同的正确输出。)?非常感谢。

系统:win7(32位)

编译:vs2012 express

编辑:程序在ubuntu12下使用gcc是正确的。

1 个答案:

答案 0 :(得分:0)

默认情况下,控制台不会显示UTF,但您可以使用:

chcp 65001将控制台更改为UTF或使用SetConsoleOutputCP

通过代码更改控制台

希望这些帮助:) 附录:抱歉,最初错过了这一点!我可以通过使用没有国际字体的第二台机器来获得“菱形”符号的唯一方法。我不得不手动将consolas字体添加到注册表中,但是在Windows控制台中显示utf字符集存在严重问题。在我的Windows 2003机器上,我必须执行以下操作: Start -> Control Panel -> Regional and Language Options -> Advanced -> Language for non-Unicode programs -> Chinese