Как читать из потока ISO-8859-1 при преобразовании в UTF-8 на C ?

#c #c 11 #c 17

Вопрос:

Я пытаюсь прочитать файл ISO-8859-1 и преобразовать его в UTF-8 перед его анализом. Я искал несколько примеров использования языка Boost (пример ниже), но не смог заставить его работать.

Каков рекомендуемый способ рассмотрения этого дела?

 DefFile parse(std::istream amp;input);

int main(int argc, char *argv[]) {
  std::fstream file;

  boost::locale::generator gen;
  gen.categories(boost::locale::codepage_facet | boost::locale::convert_facet);
  file.imbue(gen.generate("pt_BR.ISO-8859-1"));
  file.open("RD2008.DEF", std::fstream::in);

  auto df = parse(file);
  // ... do some work
}

 

Комментарии:

1. Может быть, подумайте об использовании std::wifstream вместо этого. Проникнутые ИСО-8859-1 язык, он должен уметь читать в ISO-8859-1 ввод и вывод преобразованной std::wstring строки (строки UTF-16 в Windows кодировке UTF-32 и на других платформах), которые затем можно конвертировать в UTF-8 по мере необходимости, например, в std::wstring_convert , или 3-й партии библиотеки, такие как отделение интенсивной терапии, libiconv, и т. д. Или даже вручную (преобразования UTF<->UTF довольно легко кодировать вручную)