为什么
cout<< "привет";
效果很好
wcout<< L"привет";
没有? (在Qt Creator for linux中)
答案 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有关在标准输出中使用宽字符的危险。