我正在处理一个c ++字符串库,它有4个处理ASCII,UTF8,UTF16,UTF32字符串的类,每个类都有Print函数,用于格式化输入字符串并将结果打印到stdout或stderr。我的问题是我不知道那些流的默认字符编码是什么。
现在我的类在windows中运行,之后我会添加对mac和linux的支持,所以如果你对这些流编码有所了解,我会很感激。
所以我的问题是:什么是stdout和stderr的默认编码,我可以稍后更改该编码,如果是这样,那么存储在那里的数据会发生什么?
谢谢。答案 0 :(得分:4)
stdout和stderr使用“C”语言环境。 “C”语言环境是自然的,并且在大多数系统中都转换为当前用户的语言环境。您可以使用setlocale
函数强制程序使用特定的区域设置:
// Set all categories and return "English_USA.1252"
setlocale( LC_ALL, "English" );
// Set only the LC_MONETARY category and return "French_France.1252"
setlocale( LC_MONETARY, "French" );
setlocale( LC_ALL, NULL );
支持的语言环境字符串是特定于系统和编译器的。只需要支持“C”和“”。
答案 1 :(得分:0)
您可以查看this SO answer(最受欢迎的答案)。
这不完全是你的问题,但肯定是相关的,并提供了许多有用的信息。
我不是这里的专家,但我想我们可以假设您每当使用std::cout
和std::string
时都应使用std::wcout
<{1}}