Преобразование символов cp1251 -> utf-8 -> cp1251

117
15 декабря 2018, 02:40

Работаю под 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;

Вопросы такие:

  1. Какие конкретно действия выполняют generator и его generate?
  2. to_utf - преобразовывает в UTF-8 или какой-то еще? В документации написано просто UTF. Правильно ли я написал обратное преобразование from_utf? Там те же аргументы?
  3. Я смог использовать только id ru-RU.cp1251. Для консоли не работает ru-RU.cp866, генерируется bad_cast. И пришлось добавить system("chcp 1251"); Почему так?
  4. Здесь достаточно использовать std::string и char или по какой-то причине может потребоваться wide-режим? Немного запутался, если я вот так жонглирую кодировками, то в какой ситуации может потребоваться wide?
READ ALSO
Какой метод будет вызван?

Какой метод будет вызван?

Вопрос был озвучен на собеседовании:

147
Android Camera не выводит в image view

Android Camera не выводит в image view

Мое приложение должно фотографировать и выводить на экранСделал все как в примере здесь

108
Как убрать отступы от краев экрана кустарного UI в зависимости от разрешения?

Как убрать отступы от краев экрана кустарного UI в зависимости от разрешения?

Я пишу игру на Java, (с использованием движка Slick2D и библиотеки MarteEngine, если это важно), и реализуя свой UI столкнулся с появлением отступов слева...

131
Проблема с наследованием и методами

Проблема с наследованием и методами

Есть класс Animal и сабкласс Cat, хочу, чтоб Cat принимал имя и ограничение на максимальное расстояние для бега

153