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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> преобразовать строку Unicode HTML в WideString 
:(
    Опции темы
GrigoriyFomin
Дата 11.1.2011, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Подскажите, как преобразовать файл HTML в кодировке UTF-8 (русские символы хранятся в виде и  а так же всякие  "
& < >   )  в обычную строку UNICODE Delphi. 
PM MAIL   Вверх
CodeMonkey
Дата 11.1.2011, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

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



UTF-8 с " & < >   никак не связан.

Приведи пример исходных данных, а ещё лучше - озвучь задачу.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
GrigoriyFomin
Дата 11.1.2011, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Задача - есть HTML-файл, в нем русский текст задан в виде кодов UTF-8, разные служебные сокращения амерсандов, кавычек и проч. Как получить голый текст без тэгов в нормальной кодировке Unicode. Нужен именно скоростной способ. Можно конечно загнать текст в TWebbrowser и получить текст из него, но это пушкой по воробьям, вручную парсить - как-то не эстетично, хотя наверное придется smile))))

Вот пример такого текста
ство Республики Молдова<br>

Есть ли красивое решение, как это перевести в обычную String. 
PM MAIL   Вверх
Keeper89
Дата 11.1.2011, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

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



Работать можно через DOM (innerText). Вот пример:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP;

type
  TForm1 = class(TForm)
    IdHTTP1: TIdHTTP;
    Button1: TButton;
    lblName: TLabel;
    lblPrice: TLabel;
    edtName: TEdit;
    edtPage: TEdit;
    edtPrice: TEdit;
    lblDescription: TLabel;
    mmoDescription: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses
  MSHTML, activex;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
  HTML_DIV_PRODUCT_INFO = 'proddet-topbox-prodinfo';
  HTML_DIV_PRODUCT_NAME = 'H1';
  HTML_DIV_PRODUCT_DESCRIPTION = 'P';
  HTML_DIV_PRODUCT_PRICE = 'DIV';
  HTML_DIV_PRODUCT_PRICE_DIV_ID = 'priceBox';
var
  pageHTMLCode: string;
  HTMLDocument: IHTMLDocument2;
  divsHTML, divProductInfo: IHTMLElementCollection;
  curElement: IHTMLElement;
  v: OleVariant;
  i, j: Integer;
  productName, productDescription, productPrice: string;
begin
  pageHTMLCode := IdHTTP1.Get(edtPage.Text);

  HTMLDocument := coHTMLDocument.Create as IHTMLDocument2;
  if not Assigned(HTMLDocument) then
    raise Exception.Create('Не удалось создать HTML-документ!');
  v := VarArrayCreate([0,0],VarVariant);
  v[0] := pageHTMLCode;
  HTMLDocument.write(PSafeArray(TVarData(v).VArray));

  divsHTML := HTMLDocument.all.tags('div') as IHTMLElementCollection;
  for i := 0 to divsHTML.length - 1 do
  begin

    curElement := divsHTML.item(i, 0)as IHTMLElement;
    if curElement.id <> HTML_DIV_PRODUCT_INFO then
      Continue;

    divProductInfo := curElement.children as IHTMLElementCollection;
    for j := 0 to divProductInfo.length - 1 do
    begin
      curElement := divProductInfo.item(j, 0) as IHTMLElement;
      if curElement.tagName = HTML_DIV_PRODUCT_NAME then
        productName := Utf8ToAnsi(curElement.innerText)
      else if curElement.tagName = HTML_DIV_PRODUCT_DESCRIPTION then
        productDescription := Utf8ToAnsi(curElement.innerText)
      else if (curElement.tagName = HTML_DIV_PRODUCT_PRICE) and
        (curElement.id = HTML_DIV_PRODUCT_PRICE_DIV_ID) then
      begin
        curElement := (curElement.children as IHTMLElementCollection).item(0, 0) as IHTMLElement;;
        curElement := (curElement.children as IHTMLElementCollection).item(0, 0) as IHTMLElement;;
        productPrice := Utf8ToAnsi(curElement.innerText);
      end;
    end;

    Break;
  end;

  edtName.Text := productName;
  mmoDescription.Text := productDescription;
  edtPrice.Text := productPrice;

  ShowMessage('Готово!');
end;

end.




--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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