linux как прочитать с файла utf16 и вывести его в консоль?

У меня есть файл с вот таким содержанием:введите сюда описание изображения

То есть тут 2 байта на один символ, значит это utf16.

У меня есть вот такой код:

String str;
ByteArray bstr;
bstr.Resize(size);
str.resize(size/2);
device.read((char*)bstr.GetData(), size);
for (size_t i = 0; i < size; i += 2)
{
     unsigned short res = bstr[i];
     res <<= 8;
     res |= bstr[i + 1];
     str[i/2] = res;
}

std::cout <<str;

device - это объект типа ifstream
ByteArray - это динамический массив unsigned char.
String - это typedef std::string String;
size - это размер файла.

В результате я получаю строку MainClass, так, как я и хотел, но если в файле будут юникод символы, например русские буквы, то результат будет неверный. Например запишем в файл строку "Привет мир!": введите сюда описание изображения

Теперь результат этого кода: @825B <8@!

В процессе отладки я понял, что на 10 строчке приведенного вам кода в переменную res записывается большое число, а на 11 строчке скорее всего переполнение и это странно, ведь char должен уметь хранить юникод. Что не так с моим кодом и как его исправить?


Ответы (0 шт):