У меня есть следующий код:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <locale>
#include <codecvt>
int _tmain(int argc, _TCHAR* argv[])
{
std::wifstream fin;
std::locale loc_utf_16(fin.getloc(), new std::codecvt_utf16<wchar_t, 0x10ffff, (std::codecvt_mode)(std::consume_header | std::little_endian)>);
fin.imbue(loc_utf_16);
fin.open("PathToUTF16File.txt", std::ios::binary);
if (!fin.is_open())
{
return 1;
}
std::wstring readLine;
while(!fin.eof())
{
readLine += fin.peek();
fin.seekg(0, fin.cur);
}
fin.close();
return 0;
}
, в котором я читаю закодированный файл utf16-LE. Если я использую приведенный выше код, я правильно заполняю переменную wstring readLine. Но мне интересно, почему это работает? Из документации это не должно работать, потому что при использовании метода peek просто считывается символ в текущей позиции, а использование seekg (0, fin.cur) не должно перемещать текущую позицию в потоке. Как правильно получить каждый символ из исходного потока, не потребляя его (т.е. не используя метод get ()). Конечно, это могут быть русские, арабские c и китайские символы. Спасибо всем