Как я сказал, нам нужен класс со следующим функционалом:
1. Распознавание кодировки по данным и перекодирование в Ansi
2. Перекодирование в любую кодировку (из тех, что будем поддерживать)
3. Возможность расширения на основе классов/плагинов.
На вскидку я бы сделал классы с такими интерфейсами:
Код:
TBaseFormatter = class
public
class function IsThisFormat(AFileName : Srtirng) : Boolean;
constructor Load(AFileName : String);
property Name : String;
end;
TTextCoder = class
public
procedure LoadFile(AFileName : String);
procedure SaveFile(AFileName : String; AFormatter : TBaseFormatter);
property Formatters[Index : Integer] : TBaseFormatter;
end;
Это очень грубо и в первой пристрелке.
Реально, как я себе это представляю.
У нас есть инстанс класса TTextCoder, к которому мы обращаемся для загрузки и сохранения файла. Этот класс так же хранить коллекцию форматтеров для разных кодировок (одна из них дефолтная, т.е. применяемая тогда, когда мы не можем распознать кодировку). Отдельные форматтеры выполнены в виде некоторых классов, занимающихся не только перекодированием текста, но и могущих хранить доп. информацию (например, мы можем сделать некоторые свои форматы, расширенные относительно текста и сохраняющиеся в каком-либо виде). Форматтеры могут быть в виде DLL (плагинов). В этом случае нам потребуется некоторая универсальная обертка для таких форматтеров, но это потом. Для начала надо сделать эти базовые классы.