3

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

现在我的课程在 Windows 中工作,稍后我将添加对 mac 和 linux 的支持,所以如果你对这些流编码有任何了解,我会很感激。

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

谢谢你。

4

2 回答 2

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/

于 2010-05-18T13:48:18.743 回答
0

您可以看一下这个 SO 答案(最受好评的答案)。

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

我不是这里的专家,但我想我们可以假设您应该std::cout在使用std::stringstd::wcout使用std::wstring.

于 2010-05-18T12:40:39.583 回答