Как прочитать файл кириллического Unicode в C ++?

Я пытаюсь прочитать строки из файлов .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);
}

Он отлично работает для файлов с латинскими символами.
Но для кириллических файлов я получаю странные символы вместо пробелов и соседних символов.

Например:

Что находится во входном файле:

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

Что я получаю:

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

Что я делаю неправильно?

5

Решение

одна строка выглядит очень подозрительно в вашем коде:

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

он устанавливает позицию файла, поэтому чтение строки 1 строки utf16 может быть неправильным (спецификация читается неправильно). у меня такой же результат для файла utf16 в little endian.

так что вы можете изменить положение на 0 или удалить эту строку, чтобы этот код работал

1

Другие решения

Ну разобрался, кстати

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

Работает нормально, как это. Было довольно глупо с моей стороны не попробовать это первым.
Так что спасибо всем.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector