为什么
cout<< "привет";
效果很好
wcout<< L"привет";
才不是? (在Qt Creator for linux中)
为什么
cout<< "привет";
效果很好
wcout<< L"привет";
才不是? (在Qt Creator for linux中)
GCC和Clang默认将源文件视为UTF-8。您的Linux终端很可能也配置为UTF-8。所以 cout<< "привет"
有一个UTF-8字符串,用UTF-8终端打印,一切都很好。
wcout<< L"привет"
取决于一个正确的 语言环境 配置,以便将宽字符转换为终端的字符编码。需要初始化Locale才能使转换工作( 默认的“经典”又名“C”语言环境 不知道如何转换宽字符)。使用 std::locale::global (std::locale (""))
使Locale匹配环境配置或 std::locale::global (std::locale ("en_US.UTF-8"))
使用特定的区域设置(类似于这个C例子)。
这是工作计划的完整来源:
#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上)。
也可以看看 这个答案 关于在标准输出中使用宽字符的危险。