Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как декодировать HTML константы в текст


Автор: leonidus2011 8.7.2011, 13:43
Прошу помочь.

В ответ на запрос, сервер возвращает текст в UTF8 с закодированными символами кирилицы в формате 
1056;1072;1079;1085;1099;1077;

где перед каждым 4-х значным числом стоят символы "&#". Как перекодировать этот набор цифр в читаемый русский текст?
    

Автор: xkor 8.7.2011, 23:41
первое что приходит в голову:
Код

function convert(s: string): string;
var
  i: Integer;
  c: string;
begin
  i:=1;
  while i<=Length(s) do begin
    if(s[i]='&')and(i<Length(s))and(s[i+1]='#')then begin
      Inc(i,2);
      c:='';
      while s[i]<>';' do begin
        c:=c+s[i];
        Inc(i);
      end;
      Result:=Result+WideChar(StrToInt(c));
    end else Result:=Result+s[i];
    Inc(i);
  end;
end;

PS: алгоритм не претендует на оптимальность по скорости и потреблению памяти, а так же не обрабатывает ошибки, но принцип думаю должен быть понятен - выделяем каждый код символа и превращаем собственно в сам символ)
PPS: а если у вас Delphi XE, то можно ещё так (через регулярные выражения):
Код

uses RegularExpressions;

type
  TConvert = class
    class function ForConvert(const Match: TMatch): string;
  end;

class function TConvert.ForConvert(const Match: TMatch): string;
begin
  Result:=WideChar(StrToInt(Copy(Match.Value,3,Length(Match.Value)-3)));
end;

function Convert(s: string): string;
begin
  Result:=TRegEx.Replace(s, '&\#\d*;', TConvert.ForConvert);
end;

Автор: leonidus2011 9.7.2011, 22:31
xkor огромное человеческое спасибо, это то что нужно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)