stdout 和 stderr 字符编码

发布于 2024-09-02 03:38:18 字数 304 浏览 9 评论 0原文

我正在开发一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

短叹 2024-09-09 03:38:18

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/

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:

// 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 );

The locale strings supported are system and compiler specific. Only "C" and "" are required to be supported.

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

乖乖公主 2024-09-09 03:38:18

您可以看看这个答案(得票最多的答案)。

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

我不是这方面的专家,但我想我们可以假设每当您使用 std::stringstd::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 use std::string and std::wcout whenever you use std::wstring.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文