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