微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – cout <<“привет”;或wcout << L“привет”;

为什么
cout<< "привет";

工作得很好

wcout<< L"привет";

才不是? (在Qt Creator for linux中)

解决方法

GCC和Clang认将源文件视为UTF-8.您的Linux终端最可能配置为UTF-8.所以用cout < “привет”有一个UTF-8字符串,打印在UTF-8终端中,一切都很好. wcout<< L“привет”取决于适当的 Locale配置,以将宽字符转换为终端的字符编码.需要对区域设置进行初始化,以使转换工作( default “classic” aka “C” locale不知道如何转换宽字符).对于Locale,使用std :: locale :: global(std :: locale(“”))将环境配置或std :: locale :: global(std :: locale(“en_US.UTF-8”))匹配到使用特定的区域设置( similar to this C example).

这是工作程序的完整来源:

#include <iostream>
#include <locale>
using namespace std;
int main() {
  std::locale::global (std::locale ("en_US.UTF-8"));
  wcout << L"привет\n";
}

使用g test.cc&& ./a.out这个打印“привет”(Debian Jessie).

另请参阅this answer关于使用标准输出的宽字符的危险.

原文地址:https://www.jb51.cc/c/114912.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐