为什么
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关于使用标准输出的宽字符的危险.