wchar 格式控制符_控制台输出宽字符wchar_t的中文显示问题

本文探讨了在C++中使用wcout输出中文字符遇到的问题及其解决方案。通过设置wcout的locale为本地语言,如`std::wcout.imbue(std::locale("chs"));`,可以实现宽字符的正确显示。此外,还强调了在不同操作系统和编码环境下,处理宽字符和中文字符的注意事项,包括文件编码、字符集设置、printf和wprintf的使用等。
摘要由CSDN通过智能技术生成

在缺省的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」的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值