gpt4 book ai didi

c++ - 将长字符串与 wcout 一起使用,Simple "Hello World"不起作用! (如何更改 wcout 打开 BINARY 或 TEXT 的方式)

转载 作者:行者123 更新时间:2023-11-28 02:44:13 27 4
gpt4 key购买 nike

本质上,稍微修改一下代码“Hello World”应该可以正常工作

#include <iostream>
#include <fstream>
using namespace std;

int main(){ wcout<<L"GoodMorning Καλημέρα"<<endl;return 0; }

我是不是要求太多了?那是短篇小说!

长的是:我的平台是ubuntu和g++。

我最近意识到流可以以二进制或文本模式打开。

当我们使用 wcout 打印 wstring 时,模式应该是文本模式,因为宽字符串(本质上是 utf32 )应该在从流传输到"file"的过程中进行转换,以便获得终端的代码页(实际上“代码页”是 utf8 - 但可以是任何一个,例如在特定情况下 ISO8859-7)。

所以当我们使用:

std::wcout<<L"καλημέρα"<<std::endl;

如果 wcout 的模式是文本模式,则字符串会根据 std::locale 从 utf32(linux - 在条件下)或 UCS2 字符串(windows)转换为终端的代码页(linux utf8): :global 或在流中使用的 imbue。

因此,为了使用 wcout,模式应该是 TEXT 而不是 BINARY。但是我的系统以 BINARY 而不是 TEXT 打开它,所以文本显示不正确。

如何更改 wcout 的打开方式?

最佳答案

文本与二进制模式仅控制换行符 '\n' 是否在文本 fikes 集中具有行尾序列的系统上转换为行尾序列。在 POSIX 系统上,文本与二进制模式没有影响。也就是说,没有标准的方法来控制文本模式与二进制模式。在 POSIX 系统上,您可能只替换文件描述符 1。但是,这样做根本不会改变正在使用的编码。

当您觉得需要玩弄编码技巧时,您几乎只能在使用 fike 流时获得支持。如果您想处理其他流的编码,您需要实现自己的流缓冲区来进行转换。

关于c++ - 将长字符串与 wcout 一起使用,Simple "Hello World"不起作用! (如何更改 wcout 打开 BINARY 或 TEXT 的方式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24975520/

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