Delphi XE3, unicode & utf-8?

Добрый день.

Уже третий день бьюсь над следующей задачей:

Имеется шаблон — 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;


Но не получается.


Может кто-то сталкивался с подобным? В какую сторону копать?


Спасибо.
  • Вопрос задан
  • 7640 просмотров
Решения вопроса 1
@Hint
Проблемы быть не должно. Скиньте готовый код минимального размера, где проявляется ваша проблема.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Время идёт, а проблемы те же…

Проблема в некорректной работе кода компонентов. Проблема с кодировками наблюдается у ряда стандартных компонентов среды Delphi после 7 версии. Решение только одно (из мне известных) — заменить проблемные компоненты на компоненты, где проблемы с кодировками не будет. Можно также откатить проект на версию 7.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы