Как перекодировать cp866 в UTF-8 при помощи C++ и Code::Bloсks?
Добрый день, в программировании я понимаю довольно мало, но вот встала необходимость создать консольное приложение для перекодировки вывода одной старой программы из cp866 в UTF-8. Провёл много времени в поиковиках и понял, что решить данную проблему "в лоб" довольно сложно, т.к., C++ довольно низкоуровневный и поэтому нужна библиотека для перекодирования, были найдены icu и libiconv, но вот примеров того как воспользоваться этими библиотеками для создания приложения я не нашёл или попросту их не понял. Моя задача, в целом, такая - нужен exe'шник (всё происходит под Windows) единственная функция которого брать текст на cp866 и выдавать его в utf-8, чем меньше ПО для его работы нужно установить на ПК и чем он легче, тем лучше, поэтому я не воспользовался скомпелированным libiconv. Можете в общих чертах описать варианты решения данной задачи и указать на тот вариант решения который Вы бы сочли наиболее правильным? Если будет возможность указать на пример кода который будет работать на Code::Bloсks + MinGW - буду просто счастлив.
Вам нужно перекодировать или программировать? Из вопроса не очень понятно.
Если нужно перекодировать, то подобных кодировщиков полно в интернете. Ищите они есть. В свое время пользовался несколькими вариантами кодировщиков. Вот например варинат iconv, только в одном флаконе.
Если программировать, то в WinAPI есть функция, которая осуществляет эту операцию: MultiByteToWideChar и обратная WideCharToMultiByte.
Доброго дня, спасибо за комментарий.
Мне нужно перекодировать, да, но перекодировщики в большинстве своём лежат на сайтах которым я не очень доверяю, возможно мне стоит пересмотреть своё отношение. Думал что скомпелировать что-то будет надёжнее. Когда задавал вопрос я надеялся что меня направят в направлении, в котором я ещё не догадался посмотреть, так и вышло, про WinAPI я не думал в принципе, думал воспользоваться библиотекой. В целом нашёл пару примеров и создал своего монстра (приведён ниже), он страшен, но использует WinAPI и делает то что мне нужно. Ещё раз спасибо за совет.
Если вам нужно по минимуму использовать библиотеки, в чем проблема просто взять таблицу символов, и читать из файла побайтно, записывая в другой файл уже соответствующее ему значение по таблице.
Просто создайте массив для вашего перекодировщика, и все - из сторонних библиотек только чтение/запись.
Проблемы не было, просто я не догадался до такого решения, в целом понял как его реализовать и даже нашёл несколько примеров в сети, но вот скомпелировать их у меня не получается. Буду изучать. Спасибо за совет.
PCmist, Когда-то на заре детства я на ассемблере писал кодировщик cp866 в win1251, бинарник занял около 200 байт и бОльшая часть занимала таблица.
Для utf чуть сложнее, ибо один символ может быть закодирован от 1 до 6 байт, но в целом операция не сложнее
Saboteur, мне просто не хватает базовых знаний языка, но в моём случае это будет идеальным решением. Про UTF8 я в курсе, при составлении программы учту.