在缺省的C locale下,cout可以直接输出中文,但对于wcout却不行(至少VS 2005下不行)。对于wcout,需要将其locale设为本地语言才能输出中文:
wcout输出时显示不了中文,加上下面这句就行了。
std::wcout.imbue(std::locale("chs"));
-----------------------------------------------------------------------------
#include
#include
//using namespace std;
//this main function deals with wide character and Chinese character
int main(int argc, char **argv)
{
std::ios_base::sync_with_stdio(false); //garantee that iostreams are not synchronized with stdin or stdout
std::locale loc("zh_CN.utf8"); //set the character set to zh_CN.utf8
std::wcin.imbue(loc); //set the locale of wcin and wcout
std::wcout.imbue(loc);
wchar_t c;
std::wcin >> c; //read the input
std::wcout << c << std::endl; //output
return 0;
}
在这段程序中需要注意:
1.必须使用wcin和wcout对宽字符进行输入和输出,wcin和wcout是cin和cout的宽字符版本,也属于标准库的一部分。
2.main函数首句是标准库中ios_base类的方法,将iostream与C语言中的stdin/stdout的同步关系取消,否则wcout不能正常输出中文。
3.第二句使用std空间中的locale函数设置所用的字符集,在linux环境中的可用字符集使用locale -a获取。
4.三四两句将该字符集应用于wcin和wcout流中。
5.很多文章中提到的locale loc("chs")方法并不适用于linux系统,windows下是否可行本文没有测试。
————————————————
版权声明:本文为CSDN博主「charles_ma」的