代码之家  ›  专栏  ›  技术社区  ›  Muhammad

stdout和stderr字符编码

  •  3
  • Muhammad  · 技术社区  · 15 年前

    我在一个C++字符串库中工作,它具有处理ASCII、UTF8、UTF16、UTF32字符串的4个主要类,每个类都有打印函数,它将输入字符串格式化,并将结果打印到STDUT或STDRR。我的问题是我不知道这些流的默认字符编码是什么。

    现在,我的课程在Windows中工作,稍后我将添加对Mac和Linux的支持,因此如果您了解有关流编码的任何信息,我将不胜感激。

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

    谢谢您。

    2 回复  |  直到 15 年前
        1
  •  4
  •   cuteCAT    15 年前

    stdout和stderr使用“c”区域设置。C“locale是netural,在大多数系统中,它被转换为当前用户的locale。您可以使用 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/

        2
  •  0
  •   Community Mohan Dere    8 年前

    你可以看看 this SO answer (最乐观的答案)。

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

    我不是这里的专家,但我想我们可以假设你应该使用 std::cout 无论何时使用 std::string std::wcout 无论何时使用 std::wstring.