gpt4 book ai didi

utf-8 - 在C++ 11中读取/写入/打印UTF-8

转载 作者:行者123 更新时间:2023-12-04 04:12:14 24 4
gpt4 key购买 nike

我一直在探索C++ 11的新Unicode功能,而other C++11 encoding questions很有帮助,但我对cppreference的以下代码段有疑问。该代码将写入,然后立即读取以UTF-8编码保存的文本文件。

// Write
std::ofstream("text.txt") << u8"z\u6c34\U0001d10b";

// Read
std::wifstream file1("text.txt");
file1.imbue(std::locale("en_US.UTF8"));
std::cout << "Normal read from file (using default UTF-8/UTF-32 codecvt)\n";
for(wchar_t c; file1 >> c; ) // ?
std::cout << std::hex << std::showbase << c << '\n';

我的问题很简单,为什么在 wchar_t循环中需要一个 for?可以使用简单的 u8声明 char *字符串文字,并且UTF-8编码的位布局应告诉系统字符的宽度。似乎有一些从UTF-8到UTF-32的自动转换(因此为 wchar_t),但是如果是这种情况,为什么需要转换?

最佳答案

您使用wchar_t是因为您正在使用wifstream读取文件;如果您正在使用ifstream进行阅读,则可以使用char,对于char16_tchar32_t则类似。

假设(如示例中所示)wchar_t是32位的,并且它表示的 native 字符集是UTF-32(UCS-4),则这是将文件读取为UTF-32的最简单方法;否则,这是最简单的方法。它在示例中以与将文件读取为UTF-16形成对比的方式呈现。一种更可移植的方法是显式使用basic_ifstream<char32_t>std::codecvt_utf8<char32_t>,因为可以保证将其从UTF-8输入流转换为UTF-32元素。

关于utf-8 - 在C++ 11中读取/写入/打印UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15473051/

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