Я пытаюсь прочитать строки из файлов .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);
он устанавливает позицию файла, поэтому чтение строки 1 строки utf16 может быть неправильным (спецификация читается неправильно). у меня такой же результат для файла utf16 в little endian.
так что вы можете изменить положение на 0 или удалить эту строку, чтобы этот код работал
Ну разобрался, кстати
FILE *input= _wfopen(L"test.txt", L"rb");
wchar_t line[1000];
test.txtfgetws(line, 1000, input);
Работает нормально, как это. Было довольно глупо с моей стороны не попробовать это первым.
Так что спасибо всем.