Работаю под MS VS 2017, VC++ + boost, Win-7. Задача такая: читаем из консоли (или другого места с настройкой кодировки cp1251), далее надо преобразовать в UTF-8, записать в файл, прочитать из файла UTF-8, преобразовать в 1251 и выдать текст (в данном коде вывод на консоль). Код:
system("chcp 1251");
std::string temp;
std::cin >> temp;
boost::locale::generator generator;
std::locale locale = generator.generate("ru-RU.cp1251");
std::string s = boost::locale::conv::to_utf < char > (temp, locale);
std::fstream fout;
fout.open("file.txt", std::ios::out);
fout << s;
fout.close();
std::string result;
std::fstream fin;
fin.open("file.txt", std::ios::in);
std::getline(fin, result);
fin.close();
std::cout << boost::locale::conv::from_utf < char >(result, locale) << std::endl;
Вопросы такие:
generator и его generate?to_utf - преобразовывает в UTF-8 или какой-то еще? В документации написано просто UTF. Правильно ли я написал обратное преобразование from_utf? Там те же аргументы?system("chcp 1251");
Почему так?std::string и char или по какой-то причине может потребоваться wide-режим? Немного запутался, если я вот так жонглирую кодировками, то в какой ситуации может потребоваться wide?Сборка персонального компьютера от Artline: умный выбор для современных пользователей