Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как декодировать HTML константы в текст 
V
    Опции темы
leonidus2011
Дата 8.7.2011, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 8.7.2011

Репутация: нет
Всего: нет



Прошу помочь.

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

где перед каждым 4-х значным числом стоят символы "&#". Как перекодировать этот набор цифр в читаемый русский текст?
    
PM MAIL   Вверх
xkor
Дата 8.7.2011, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.1.2007
Где: Питер

Репутация: 1
Всего: 4



первое что приходит в голову:
Код

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;


Это сообщение отредактировал(а) xkor - 9.7.2011, 00:09
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
leonidus2011
Дата 9.7.2011, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 8.7.2011

Репутация: нет
Всего: нет



xkor огромное человеческое спасибо, это то что нужно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1164 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.