3

我尝试将 UTF-8 字符串打印到 Windows 控制台。控制台代码页设置为65001(utf-8),字体设置为lucida console,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 是正确的。

4

1 回答 1

0

默认情况下,控制台不会显示 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

于 2013-04-11T08:14:20.057 回答