gpt4 book ai didi

c++ - 从 C++ 文件中读取和打印 UTF-8 符号

转载 作者:可可西里 更新时间:2023-11-01 14:42:28 25 4
gpt4 key购买 nike

我遇到了一个问题,但无法在互联网上找到答案。尽管我发现了许多类似的问题,但没有一个答案对我有用。我在 Windows 10 上使用 Visual Studio 2015。

所以我的部分代码是:

wstring books[50];
wstring authors[50];
wstring genres[50];
wstring takenBy[50];
wstring additional;
bool taken[50];
_setmode(_fileno(stdout), _O_U8TEXT);
wifstream fd("bookList.txt");
i = 0;
while (!fd.eof())
{
getline(fd, books[i]);
getline(fd, authors[i]);
getline(fd, genres[i]);
getline(fd, takenBy[i]);
fd >> taken[i];
getline(fd, additional);
i++;
}

我需要的是使用 C++ 读取以 UTF-8 编码的文本文件。但是,当我读取文件时,那些宽字符串发生了变化,当我打印它们时,输出文本完全不同。

输入:

ąčę

输出:

ÄÄÄ


如何避免它并正确阅读文本?

最佳答案

UTF-8 is (可能)不是宽字符串。了解 UTF-8 everywhere . UTF-8 使用8 位字节(有时是几个)来编码Unicode 字符。所以在 C++ 中,一个 unicode 字符是从 1 到 6 个字节的序列中解析出来的(即 char-s)。

您需要一些 UTF-8 解析器,而 C11 或 C++11 标准没有提供。所以你需要一些外部库。查看libunistring (这是一个简单的 C UTF-8 解析库)或其他东西( QtPOCOGlibICU ,...)。您可以决定解析 UTF-8 并将其转换为宽 UTF-32 (使用 u32string-s 和 char32_t)和向后,或者你最好决定在 UTF-8 内部工作(使用 std::stringchar)

因此,您将解析并打印 char-s 序列(使用 UTF-8 编码),并且您的程序将使用普通 std::string-s 和普通char-s(不是 std::wstringwchar_t)但处理 UTF-8 序列 ...

关于c++ - 从 C++ 文件中读取和打印 UTF-8 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44872753/

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