如何在c++中读取西里尔字母Unicode文件

How to read Cyrillic Unicode file in C++?

本文关键字:Unicode 文件 c++ 读取      更新时间:2023-10-16

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

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被错误读取)。对于小端进的utf16文件,我有相同的结果。

所以你可以改变位置为0或删除这一行,以使这段代码工作

我知道了:

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

这样就可以了。我不先试一试真是太傻了。谢谢大家