gpt4 book ai didi

c++ - 如何将 UTF-8 字符串转换为流的编码

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:07:19 26 4
gpt4 key购买 nike

假设我已经决定 use UTF-8 everywhere internally在我的 C++11 程序中,所以我有一个 std::string 包含以 UTF-8 编码的文本。我现在想对该文本进行一些 IO。例如,将其写入 std::cout。尽管我在内部使用过 UTF-8,但我不能假设程序用户和操作环境也如此有义务使用 UTF-8。出于好或坏的原因,我应该通过 std::cout 发送的文本的字符编码可能不是 UTF-8。 My program must perform a conversion ,采用我的 UTF-8 编码文本并将其转换为 std::cout 期望的编码。如何找出该输出流的编码,然后进行字符编码?

查看标准 C++ 流的声明,看起来我可以使用 std::io_base::get_loc 获取输出流的“语言环境”,然后获取一个 std::codecvt 流的“代码转换方面”。但是我应该得到哪个方面?我实际上如何使用该方面将 UTF-8 转换为输出编码?

如果标准库的那些工具不能完成任务,我还有什么其他选择?

最佳答案

How can I find out the encoding on that output stream

你不知道。

任何不是您自己的输出流(无论是 coutcerr、文件流还是其他)的接收者的期望都是 not 你可以确定的东西。 “标准输出”的概念并不与相关的“编码”概念捆绑在一起。编码期望是隐式的,而不是显式的。

是的,流具有语言环境方面。但这纯粹是你在说“我想以这种方式编码输出”。这说明没有关于流另一端消费者的需求。这只是一种将您认为接收者想要的东西转换成的方法。

C++ 没有办法查询接收者的期望。如果没有这些知识,ICU 或 iconv 或任何对您没有帮助的东西。

这通常是使用特定于平台的代码来完成的。在您的 Windows 构建中,您可以输出以 UTF-16 编码的 wchar_t,或者设置代码页并使用 facets 进行转换。在 Linux 上,您通常可以假设控制台将接受 UTF-8。等等。

但是没有简单的“这样做,它就会起作用”的机制。

关于c++ - 如何将 UTF-8 字符串转换为流的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47738276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com