免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4052 | 回复: 2
打印 上一主题 下一主题

[C++] cout如何能正常的输出宽字符的字符串? [复制链接]

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 10:16:532015元宵节徽章
日期:2015-03-06 15:53:22
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-06-18 17:08 |只看该作者 |倒序浏览

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.     wcout << "abc" << endl;//wcout会把char自动转换成wchar_t再输出吗? 如何验证有没有转换?
  6.     cout << "你好" << endl;//"你好"是多字节字符串,设置了中文代码页就可以显示。但为什么上面那个L"abc"不可以?
  7.     cout << L"abc" << endl;//为什么cout不能输出宽字符? 是不是通过locale设置或者代码页设置,能让cout输出多字节
  8.     return 0;
  9. }
复制代码
如上面所示,
1. 第一个wcout能输出窄自己的字符串,是不是意味着wcout会自动把单字节的字符串,在内存里面转化成双字节的字符串,再输出?
2. 第二个cout输出多字节的中文没有问题。只要代码页设置正确就可以了。
3. 第三个cout输出总是乱码。为什么? cout能输出中文,都不能输出L开头的字符串吗? 能否通过什么设置来让它和wcout一样呢?

谢谢。

论坛徽章:
6
2015年辞旧岁徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16赛季CBA联赛之浙江
日期:2016-11-05 14:38:4115-16赛季CBA联赛之新疆
日期:2016-11-11 18:38:06
2 [报告]
发表于 2016-06-18 18:00 |只看该作者
这要看具体所用的控制台能接受的字符编码
#stty
speed 38400 baud; line = 0;
-brkint -imaxbel iutf8

控制台模拟器的种类很多,但大多都只接受utf8编码(控制台本身的设计已经很老了),有的模拟器则能支持gb18030编码。楼主若有能力自行设计控制台的话,可以有更高的自由度设计使用想要的任何编码。应用程序一般是把其它编码转换成控制台支持的编码后再输出。

论坛徽章:
6
2015年辞旧岁徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16赛季CBA联赛之浙江
日期:2016-11-05 14:38:4115-16赛季CBA联赛之新疆
日期:2016-11-11 18:38:06
3 [报告]
发表于 2016-06-18 18:35 |只看该作者
知道了这种转换关系,就可以看出wcout就是负责转换wchar_t类型的字符串的。有的中文串本身已经是控制台能接受的编码了,这样的中文串就直接可以cout输出,不必再作转换。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP