Добрый день.
Уже третий день бьюсь над следующей задачей:
Имеется шаблон — html-файл в кодировке utf-8 и форма, на которой, условно, находятся несколько компонентов TEdit.
Всё что надо сделать — это заменив в шаблоне строки "{{ edit1 }}" на содержимое Edit.Text, сохранить получившийся файл обратно в utf-8.
Казалось бы, задача замены подстроки в строке — ан нет: проблема с кодировками. Как я ни стараюсь — теряются «нестандартные» символы, типа
ü и
ö.
Перепробовал много способов:
// template: TStringList, в котором хранится содержимое файла template.html
for i:=0 to template.Count-1 do
begin
s:=template.Strings[i];
s:=StringReplace(s,'{{ edit1 }}',Edit1.Text,[rfReplaceAll,rfIgnoreCase]);
s:=StringReplace(s,'{{ edit2 }}',Edit2.Text,[rfReplaceAll,rfIgnoreCase]);
WS:=s; // пробовал и так
WriteFile(HF,PChar(WS)^,Length(WS)*2,D, nil);
//writeln(f,s); // и так
end;
либо теряются умлауты из шаблона, либо из edit'ов (
ü становится
u).
пробовал и такой вариант — вручную перегонять кодировки:
var
s,s8:UTF8String;
s2:string;
fi,fo:textfile;
l:integer;
begin
AssignFile(fi,'template8.html');
AssignFile(fo,'result.html');
Reset(fi);
Rewrite(fo);
while not EoF(fi) do
begin
readln(fi,s);
s2:=UTF8ToUnicodeString(s);
l:=length(s2);
SetLength(s8,l*SizeOf(Char)+1);
UnicodeToUtf8(PAnsiChar(s8),length(s8),PWideChar(s2),l);
writeln(fo,s8);
end;
CloseFile(fi);
CloseFile(fo)
end;
Но не получается.
Может кто-то сталкивался с подобным? В какую сторону копать?
Спасибо.