Кодування бінарних файлів (mime base84)


Головна форма програми.

Практикуємося у використанні потоків: TFileStream, TBase64EncodingStream, TBase64DecodingStream. Програма кодує файли (бінарні, зокрема - картинки) використовуючи кодування MIME - base64. Отриманий код складається тільки з 64 текстових символів: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + / і може бути переданий по каналах, пропускає тільки цей алфавіт (наприклад, деякі протоколи, використовувані Інтернетом). Цей код можна використовувати як дані в SQL-запитах і таким чином зберігати бінарні дані (в закодованому текстовому вигляді) в базах даних. Розплата за це - збільшення обсягу даних на 33%.

Залишилися невирішені проблеми (в основному русифікація):
  1. У тексті исходника .pas часто доводиться використовувати функцію AnsiToUtf8 ()
  2. Чи не понімет російські імена файлів при відкритті (OPenDialog) і перетворює їх в крякозябри (UTF8) (SaveDialog) якщо намагатися записати такий файл. Однак, файли ці відкриваються блокнотом. ++ Виправлено
  3. Висновок російського тексту з файлу .txt в Memo (при копіюванні): схоже, потрібно його перетворювати ansitoutf8 бо крякозябри ++ Виправлено
  4. При кодуванні - не можна кодувати один і той же файл двічі поспіль (зайнятий? - не закрите?) ++ Виправлено: додано InStream.Free;
Схоже, що UTF8 - рідна кодування для Лазаруса. Або десь це перемикається (буду шукати) і зміна кодування исходника на ці проблеми не впливає.

Текст головного модуля (виправлений, а в архіві - (поки) непоправний)

Розпакуйте архів в папку і відкрийте projStreams1.lpi - для роботи з проектом
Проект повинен відкритися (якщо встановлений Лазарус).
Або запустіть projStreams1.exe (якщо зажадає що-небудь, повідомте, будь ласка)

Схожі статті