Задать вопрос

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;


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


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


Спасибо.
  • Вопрос задан
  • 7853 просмотра
Подписаться 3 Оценить 2 комментария
Помогут разобраться в теме Все курсы
  • АПОК
    Инженер-программист - курс переподготовки
    1 месяц
    Далее
  • ЭКОДПО
    Инженер-программист - переподготовка
    2 месяца
    Далее
Решения вопроса 1
@Hint
Проблемы быть не должно. Скиньте готовый код минимального размера, где проявляется ваша проблема.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Время идёт, а проблемы те же…

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

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

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 250 000 ₽
ITK academy Краснодар
от 80 000 ₽