我遇到了一个问题,在互联网上找不到答案.虽然我发现了许多类似的问题,但没有一个答案适合我.所以我的部分代码是:
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++;
}
Run Code Online (Sandbox Code Playgroud)
我需要的是用C++读取用UTF-8编码的文本文件.但是,当我读取文件时,那些宽字符串会被更改,当我打印它们时,输出文本是完全不同的.输入: ±čč 输出:ÄÄÄ 我如何避免它并正确阅读文本?我正在使用Visual Studio 2015,C++,Windows 10.
UTF-8(可能)不是宽字符串.随处了解UTF-8.UTF-8使用8位字节(有时是几个字节)来编码Unicode字符.所以在C++中,unicode字符是从1到6个字节的序列(即char-s)中解析出来的.
您需要一些UTF-8解析器,而C11或C++ 11标准不提供任何解析器.所以你需要一些外部库.查看libunistring(这是一个简单的C UTF-8解析库)或其他东西(Qt,POCO,Glib,ICU,...).你可以决定要分析和转换UTF-8成宽UTF-32(使用u32string-s和char32_t)和倒退,否则你会更好地决定在UTF-8(使用内部工作std::string和char)
因此,您将解析并打印char-s 序列(使用UTF-8编码),您的程序将使用plain std::string-s和plain char-s(不是std::wstring或wchar_t)但处理UTF-8序列 ...
| 归档时间: |
|
| 查看次数: |
504 次 |
| 最近记录: |