如何在 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);
那样工作很好。我很愚蠢,没有先尝试一下。
所以谢谢大家。
我正在尝试从已保存为 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);
那样工作很好。我很愚蠢,没有先尝试一下。 所以谢谢大家。