我尝试将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