stdout 和 stderr 字符编码
我正在开发一个 C++ 字符串库,该库有 4 个主要的类,处理 ASCII、UTF8、UTF16、UTF32 字符串,每个类都有 Print 函数,用于格式化输入字符串并将结果打印到 stdout 或 stderr。我的问题是我不知道这些流的默认字符编码是什么。
目前我的课程在 Windows 上运行,稍后我将添加对 Mac 和 Linux 的支持,因此如果您了解有关这些流编码的任何信息,我将不胜感激。
所以我的问题是: stdout 和 stderr 的默认编码是什么?我可以稍后更改该编码吗?如果可以,存储在那里的数据会发生什么?
谢谢。
i working on a c++ string library that have main 4 classes that deals with ASCII, UTF8, UTF16, UTF32 strings, every class has Print function that format an input string and print the result to stdout or stderr. my problem is i don't know what is the default character encoding for those streams.
for now my classes work in windows, later i'll add support for mac and linux so if you know anything about those stream encoding i'll appreciate it.
so my question is: what is the default encoding for stdout and stderr and can i change that encoding later and if so what would happens to data stored there?
thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
stdout 和 stderr 使用“C”语言环境。 “C”区域设置是自然的,并且在大多数系统中翻译为当前用户的区域设置。您可以使用
setlocale
函数强制程序使用特定区域设置:支持的区域设置字符串特定于系统和编译器。仅需要支持“C”和“”。
http://www.cplusplus.com/reference/clibrary/clocale/
stdout and stderr use "C" locale. "C" locale is netural, and in most system translated into the current user's locale. You can force the program to use a specific locale using
setlocale
function:The locale strings supported are system and compiler specific. Only "C" and "" are required to be supported.
http://www.cplusplus.com/reference/clibrary/clocale/
您可以看看这个答案(得票最多的答案)。
这不完全是你的问题,但它肯定是相关的,并且提供了很多有用的信息。
我不是这方面的专家,但我想我们可以假设每当您使用
std::string
和std::wcout< 时都应该使用
std::cout
/code> 每当您使用std::wstring.
You might take a look at this SO answer (most upvoted answer).
This is not exactly your question, but it is surely related and gives a lot of useful information.
I'm not expert here, but I guess we can assume you should use
std::cout
whenever you usestd::string
andstd::wcout
whenever you usestd::wstring.