我尝试将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是正确的。

最佳答案

默认情况下,控制台不会显示UTF,但是您可以使用:
chcp 65001将控制台更改为UTF或使用SetConsoleOutputCP通过代码进行更改

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

09-04 07:43
查看更多