为什么
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"привет"
取决于适当的区域设置配置,以便将宽字符转换为终端的字符编码。需要初始化语言环境才能进行转换(默认的“经典”又名“C”语言环境不知道如何转换宽字符)。用于std::locale::global (std::locale (""))
Locale 以匹配环境配置或std::locale::global (std::locale ("en_US.UTF-8"))
使用特定的 Locale(类似于此 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 上)。
另请参阅此答案,了解在标准输出中使用宽字符的危险。