Кодировка UTF-8 wifstream getline для linux - PullRequest
0 голосов
/ 07 мая 2019

Я пишу код, который будет работать как на Linux, так и на Windows (и если это означает введение нескольких макросов ifdef, это нормально).Линия getline для wifstream, кажется, принимает только wchar_t, и, поскольку wchar_t является реализацией, специфичной для компилятора, я не получаю желаемого результата, когда пытаюсь прочитать слово poké.

Вот фрагмент моей реализации:

std::wifstream GetFp()
{
    auto fp =  std::wifstream (path, std::wifstream::binary);
    const std::locale utf8_locale
                = std::locale(std::locale(), new std::codecvt_utf8<WCHAR>());
            fp.imbue(utf8_locale);
}

Позже я получаю этот уникальный указатель:

auto ifs = std::make_unique<std::wifstream>(GetFp());

В функции readfile есть цикл for, который строка за строкой получает файл.Функция чтения строки, которая вызывается как getline(ifs.get(), реализована следующим образом:

bool getline(std::wistream* ifs)
{
#ifndef XPLATFORM
    TChar buf[8192];
#else
    wchar_t buf[8192];
#endif
ifs->getline(buf, _countof(buf));
if (ifs->eof())
   return false;
return true;
}

Если я попробую любой другой тип данных, кроме wchar_t, для реализации linux, он будет вызывать проблемы с компиляцией.Любые предложения, чтобы исправить это, будут действительно полезны.

...