如何在 C++ 中读取 Cyrillic Unicode 文件?

How to read Cyrillic Unicode file in C++?

我正在尝试从已保存为 Unicode 的 .txt 文件中读取行。 我就是这样做的:

wifstream input;
string path = "test.txt";
input.imbue(locale(input.getloc(),
        new codecvt_utf16<wchar_t, 0x10ffff, consume_header>));

input.open(path);
if (input.is_open())
{
    wstring line;
    input.seekg( 1 , ios_base::beg);
    getline(input, line);
}

它适用于包含拉丁字符的文件。 但是对于西里尔文文件,我得到的是奇怪的符号,而不是空格和相邻字符。

例如:

输入文件中的内容:

Госдеп США осудил нападение на

我得到的:

︓осдепР!ШАР>судилР=ападениеР=а

我做错了什么?

您的代码中有一行看起来非常可疑:

input.seekg(1, ios_base::beg);

它设置文件位置,因此读取utf16字符串起始位置1可能不正确(BOM读取错误)。我对 little endian 的 utf16 文件有相同的结果。

因此您可以将位置更改为 0 或删除此行以使此代码正常工作

嗯,想通了:

FILE *input= _wfopen(L"test.txt", L"rb");
wchar_t line[1000];
test.txtfgetws(line, 1000, input);

那样工作很好。我很愚蠢,没有先尝试一下。 所以谢谢大家。