![]() |
Problem mit Zeichen im RichEdit
hallo zusammen.
ich möchte aus einer HTML seite daten lesen. ich habe mir eine unit geschrieben :
Delphi-Quellcode:
aufgerufen wird folgendes :
unit htmlFuncts;
interface uses MSHTML, ActiveX, Dialogs, windows, sysutils, stdctrls, forms, classes, comCtrls, commctrl; function GetDocumentFromFile(const markup: WideString): IDispatch; function GetHtmlText(const markup : widestring; ElementName: string = ''; HTMLText : boolean = false): string; procedure LadeHTMltoTable(memo : TRichEdit; Liste : TListView); implementation procedure LadeHTMltoTable(memo : TRichEdit; Liste : TListView); var ProcessForm : TForm; Label1 : TProgressBar; i,j: Integer; begin ProcessForm := Tform.Create(nil); ProcessForm.Height := 80; ProcessForm.Width := 250; ProcessForm.FormStyle := fsStayOnTop; ProcessForm.Caption := 'Vortschritt'; Label1 := TProgressBar.Create(ProcessForm); Label1.Min := 0; Label1.max := Memo.lines.Count; Label1.Top := 12; Label1.Left := 12; Label1.Width := 220; Label1.height := 15; ProcessForm.Position := poMainFormCenter; ProcessForm.Show; Label1.Parent := ProcessForm; label1.show; j := 0; for i := 0 to Memo.lines.Count - 1 do begin Label1.stepby(1); ProcessForm.Update; Label1.refresh; sleep(5); end; ProcessForm.Release; end; function GetDocumentFromFile(const markup: WideString): IDispatch; var doc: OleVariant; f : TextFile; TextString : Widestring; begin AssignFile(f, Markup); Reset(f); Result := CoHtmlDocument.Create; doc := Result; doc.Open; while not eof(f) do begin readln(f, textstring); doc.write(textstring); end; doc.Close; CloseFile(f); end; function GetHtmlText(const markup: widestring; ElementName: string = ''; HTMLText : boolean = false): string; var m_pHtmlDoc2 : IHTMLDocument2; HTMLElement : IHTMLElement; HTMLTxtRange : IHTMLTxtRange; begin result := ''; try m_pHtmlDoc2 := GetDocumentFromFile(Markup) as IHTMLDocument2; // document get if assigned(m_pHtmlDoc2) then begin if ElementName = '' then HTMLElement := m_pHtmlDoc2.body as IHTMLElement // select body for all text else HTMLElement := m_pHtmlDoc2.all.item(ElementName,0) as IHTMLElement; if assigned(HTMLElement) then begin // check m_pHtmlDoc2.selection.empty; // clear old selection HTMLTxtRange := IHTMLTxtRange(m_pHtmlDoc2.selection.createRange); if assigned(HTMLTxtRange) then begin HTMLTxtRange.moveToElementText(HTMLElement); // move selection to Element HTMLTxtRange.select; // select if HTMLText then result := HTMLTxtRange.htmltext // get the TEXT else result := HTMLTxtRange.text; // get the PLAIN TEXT m_pHtmlDoc2.selection.empty; // remove selection end; end; end; except on E : Exception do ShowMessage(E.ClassName+' error raised, with message : '+E.Message); end; end; end.
Delphi-Quellcode:
Memo heissen die Variablen da es ursprünglich ein Memo war und ich dachte das ein RichEdit das problem evtl lösen kann :)
procedure TForm1.Button1Click(Sender: TObject);
begin old_size := 0; New_size := 0; old_File := ExtractFilePath(ParamStr(0)) + 'akt.xml'; new_file := ExtractFilePath(ParamStr(0)) + 'akt_old.xml'; tmpfile := new_File; GetInetFile('http://eu.battle.net/wow/de/guild/die-todeskrallen/legenden%20der%20horde/roster', tmpFile,NIL); RichEdit1.Text := GetHtmlText(tmpfile, 'roster', checkbox1.Checked); end; Problem ist das sonderzeichen wie Ö, oder anderen zeichen hinterher im RichEdit als hieroglyphen angezeigt. bsp : aus Wöchentlich macht es im RichEdit dann Wöchentlich. ich weiss nich an welcher stelle ich dieses Problem lösen kann. Denn nachher soll dann aus dem Gelesenen Text weitere details ausgelesen werden und da muss der richtige zeichensatz stimmen. Kann es sein das bei der Function GetHtmlText etwas angepasst werden kann bzw muss um dieses Problem zu lösen ? Bin für Jeden rat dankbar. gruss Sascha |
AW: Problem mit Zeichen im RichEdit
GetHTMLText?
HAbe ich das richtig verstanden, dass du eigentlich nur diesen Text anzeigen möchtest?(Also als planetext) im Richedit? EDIT: oder filtesrt du da oben nur Bestimmte sektionen heraus o.O MFG Memnarch |
AW: Problem mit Zeichen im RichEdit
der HTMLCode soll für den gewählten teil angezeigt werden, damit ich dann hinterher weiter durchsuchen kann.
so das ich nicht die Ganze datei durchsuchen muss. Ich möchte hinterher aus der HTML datei eine Tabelle mit den Daten erstellen. Muss das aber von hand durchsuchen da die datei sehr Komplex ist. gruss Sascha das ist der Teil der hinterher weiter durchsucht werden muss : HTML-Code:
<div id="roster" class="table"> |
AW: Problem mit Zeichen im RichEdit
Die Daten sind nun ausgelesen. Funktioniert auch super.
Aber das Problem mit den Zeichen besteht weiterhin. :( Hat keiner eine Idee ???? |
AW: Problem mit Zeichen im RichEdit
Kann es sein das die Umlaute als html zeichen so drin stehen Ö = ö (heute standard)
und Du das evtl erst noch Filtern musst? Irgend wo mal was gesehen darüber, weiss bloss nicht mehr wo :? Gruss alfold |
AW: Problem mit Zeichen im RichEdit
eahmmm..... Gute Frage. Im quellcode stehen die im htmlumlaut code drinnen. aber wie kann ich das dann in Delphi in den richtigen Zeichensatz umwandeln ?
geht as überhaupt ? |
AW: Problem mit Zeichen im RichEdit
Glaube irgendwas mit AnsiToUtf8 und Utf8ToAnsi,
Delphi-Quellcode:
wenn es die Stelle ist wo Du die Zeilen ausliest?
RichEdit1.Text := GetHtmlText(utf8toansi(tmpfile), 'roster', checkbox1.Checked);
Gruss alfold |
AW: Problem mit Zeichen im RichEdit
die lösung mit dem utf8toansi hat mir den richtigen lösungsansatz gegeben.
Ich habe dann noch etwas weiter gesucht und habe dann einen Thread gefunden der mich dann endgültig auf die Endlösung brachte. ich musste schon beim Laden der Datei vom PC die Daten convertieren. nun sieht die Nötige Funktion nun wie folgt aus :
Delphi-Quellcode:
und schon ist der Rest gelöst.
function GetDocumentFromFile(const markup: WideString): IDispatch;
var doc: OleVariant; f : TextFile; TextString : Widestring; begin AssignFile(f, Markup); Reset(f); Result := CoHtmlDocument.Create; doc := Result; doc.Open; while not eof(f) do begin readln(f, textstring); textstring := Utf8Encode(textstring); doc.write(Utf8ToAnsi(textstring)); end; doc.Close; CloseFile(f); end; gruss Sascha :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz