#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 довольно легко кодировать вручную)