Я хочу взять файл, закодированный в UTF-8, который не использует более 128 различных символов, а затем переместить его в 7-битную кодировку, чтобы сэкономить 1/8 места. Например, если у меня есть текстовый файл размером 16 МБ, в котором используются только первые 128 символов (ascii), я хотел бы уменьшить лишний бит, чтобы уменьшить размер файла до 14 МБ.
Как бы я поступил так?
Кажется, что для этого не существует бесплатной или проприетарной программы, поэтому я подумал, что могу попробовать сделать простую (если неэффективную) программу.
Основная идея, которую я имею, состоит в том, чтобы сделать функцию из текущих шестнадцатеричных / десятичных / двоичных значений, используемых для каждого символа, в 128 значений, которые я бы имел в семибитовой кодировке, затем просканировать файл и записать каждое измененное значение в новый файл.
Так что если файл выглядел так (я буду использовать десятичный пример, потому что я стараюсь не думать в шестнадцатеричном формате)
127 254 025 212 015 015 132 ...
Это станет
001 002 003 004 005 005 006
Если 127 сопоставлено с 001, 254 сопоставлено с 005 и т. Д.
Хотя я не совсем уверен в паре вещей.
- Этого будет достаточно, чтобы на самом деле сократить размер файла? У меня плохое предчувствие, что это просто оставило бы дополнительный 0 в двоичной строке - 11011001 может быть сопоставлен с 01000001, а не 1000001, и я не буду на самом деле экономить место.
Если это произойдет, как мне избавиться от нуля?
- Как открыть файл для чтения / записи в двоичном / десятичном / шестнадцатеричном формате, а не только в текстовом формате?
Я в основном работал с Python, но могу перепутать C, если мне нужно.
Спасибо.