stdout和stderr字符编码

时间:2010-05-18 12:23:11

标签: c++ string unicode stdout stderr

我正在处理一个c ++字符串库,它有4个处理ASCII,UTF8,UTF16,UTF32字符串的类,每个类都有Print函数,用于格式化输入字符串并将结果打印到stdout或stderr。我的问题是我不知道那些流的默认字符编码是什么。

现在我的类在windows中运行,之后我会添加对mac和linux的支持,所以如果你对这些流编码有所了解,我会很感激。

所以我的问题是:什么是stdout和stderr的默认编码,我可以稍后更改该编码,如果是这样,那么存储在那里的数据会发生什么?

谢谢。

2 个答案:

答案 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”和“”。

http://www.cplusplus.com/reference/clibrary/clocale/

答案 1 :(得分:0)

您可以查看this SO answer(最受欢迎的答案)。

这不完全是你的问题,但肯定是相关的,并提供了许多有用的信息。

我不是这里的专家,但我想我们可以假设您每当使用std::coutstd::string时都应使用std::wcout <{1}}