Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to read Cyrillic Unicode file in C++?

I'm trying to read lines from .txt files, that have been saved as Unicode. That's how i'm doing it:

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);
}

It works fine for files with Latin characters. But for Cyrillic files I get weird symbols instead of spaces and adjacent characters.

For example:

What is in the input file:

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

What I get:

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

What am I doing wrong?

like image 469
max_hassen Avatar asked Nov 09 '22 13:11

max_hassen


1 Answers

one line looks very suspicous in your code:

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

it sets file position, so reading utf16 string starting position 1 might be incorrect (BOM is read incorrectly). i have the same result for utf16 file in little endian.

so you might change position to 0 or delete this line in order to make this code work

like image 161
Alexander Avatar answered Nov 15 '22 04:11

Alexander