COUT<< “привет”;或wcout<< L “привет”;

时间:2013-09-07 16:57:49

标签: c++ linux unicode console-application

为什么

cout<< "привет";

效果很好

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

没有? (在Qt Creator for linux中)

1 个答案:

答案 0 :(得分:15)

GCC和Clang默认将源文件视为UTF-8。您的Linux终端很可能也配置为UTF-8。所以cout<< "привет"有一个UTF-8字符串,用UTF-8终端打印,一切都很好。

wcout<< L"привет"取决于正确的Locale配置,以便将宽字​​符转换为终端的字符编码。需要初始化Locale才能使转换生效(default "classic" aka "C" 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有关在标准输出中使用宽字符的危险。