![]() |
Mit IdHTTP Seite aufrufen und an MemoryStream übergeben = Zeichen fehlerhaft
Mit dem folgenden Code lese ich den HTML Code der geladenen Web-Seiten auf:
Code:
Damit der HTML Code der aufgerufenen Seiten vollständig als Text angezeigt werden kann muss ich ein MemoryStream nutzen, dazu habe ich schon in einem anderen Beitrag das Problem erläutert.
function GetHTMLCode(xUrl: String): String;
var xResult : TStringList; xResMemo : TMemoStream; begin xResult := TStringList.Create; xResMemo : TMemoStream.Create; try try IdHTTP1.Get(xUrl, xResMemo); xResMemo.Position := 0; xResult.Text := StreamToText(xResMemo, ' ', 00); except on E: EIdHTTPProtocolException do begin xResult.Add('E.Message: ' + E.Message); xResult.Add('E.ErrorMessage:'); xResult.Add(E.ErrorMessage); end; end; finally Result := xResult.Text; xResult.Free; xResMemo.Free; end; end; function StreamToText(sStream: TStream; sNewSign: string; sOldSign: Integer): AnsiString; var xLen, j, xSize : Integer; xTemp : string; begin try xLen := sStream.Size; SetLength(Result, xLen); if xLen > 0 then begin sStream.ReadBuffer(Result[1], xLen); for j := 1 to xLen do begin if Ord(Result[j]) = sOldSign then begin xTemp := xTemp + sNewSign end else begin xTemp := xTemp + Result[j]; end; end; end; finally Result := xTemp; end; end; Allerdings habe ich jetzt das Problem das kyrillische, chinesische, usw. Zeichen als Hieroglyphen angezeigt werden. Wie kann man die Zeichen aus der Funktion richtig in einen Text kodieren? |
AW: Mit IdHTTP Seite aufrufen und an MemoryStream übergeben = Zeichen fehlerhaft
Du greifst auf Result zu?
|
AW: Mit IdHTTP Seite aufrufen und an MemoryStream übergeben = Zeichen fehlerhaft
Ich schätze fast ein TStringstream mit dem richtigen Encoding macht einerseits deine StreamToText procedure überflüssig und würde wahrscheinlich das richtige Ergebnis liefern.
Zitat:
sStream.ReadBuffer(Result[1], xLen); schreibt Daten in Result, falls das die Frage war. |
AW: Mit IdHTTP Seite aufrufen und an MemoryStream übergeben = Zeichen fehlerhaft
Welches Encoding wird verwendet (UTF-8, UTF-16, ...)?
|
AW: Mit IdHTTP Seite aufrufen und an MemoryStream übergeben = Zeichen fehlerhaft
Zitat:
Allerdings scheint die Seite mit einem speziellen Content-Encoding geliefert zu werden (im Browser-Debugger von Firefox wird dies angezeigt): Content-Encoding: br Indy unterstützt dieses Encoding anscheinend nicht (Brotli). |
AW: Mit IdHTTP Seite aufrufen und an MemoryStream übergeben = Zeichen fehlerhaft
Zitat:
|
AW: Mit IdHTTP Seite aufrufen und an MemoryStream übergeben = Zeichen fehlerhaft
Zitat:
|
AW: Mit IdHTTP Seite aufrufen und an MemoryStream übergeben = Zeichen fehlerhaft
Zitat:
Dir ist klar, dass der Beitrag den ich gerade von dir zitiere #7 ist? Meiner wird #8 sein. #9+ existieren (noch) nicht.. |
AW: Mit IdHTTP Seite aufrufen und an MemoryStream übergeben = Zeichen fehlerhaft
So hier meinte ich, nur grob hier hin gekritzelt, ich hoffe das klappt.
Delphi-Quellcode:
Function MyFilter ( inStream: TStream ): AnsiString;
var xBuf: TBytes; i : Integer; begin try SetLength(xBuf, inStream.Size); // puffer größe bestimmen inStream.ReadBuffer(Pointer(xBuf)^, Length(xBuf)); // puffer füllen for I := 0 to Length(xBuf) -1 do if xBuf[i] = 0 then xBuf[i] := 20; // mache aus 0 ein Leerzeichen finally SetLength(Result, Length(xBuf)); // ausgabegröße for I := 0 to Length(xBuf) -1 do Result[i+1] := AnsiChar(xBuf[i]); // alles aus puffer ins Result end; end; |
AW: Mit IdHTTP Seite aufrufen und an MemoryStream übergeben = Zeichen fehlerhaft
Also so funktionierts bei mir.
Damit kann ich ![]()
Delphi-Quellcode:
function TForm1.GetHTMLCode(xUrl: String): String;
var xResMemo : TStringStream; begin xResMemo := TStringStream.Create('', TEncoding.UTF8); try IdHTTP1.Get(xUrl, xResMemo); xResMemo.Position := 0; Result := xResMemo.DataString finally xResMemo.Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:11 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 by Thomas Breitkreuz