![]() |
Indy.get Umlaute = ?
Hi,
ich habe ein Problem mit Indy momentan. Sobald ich den Quelltext per http.get mir hole, werden die Umlaute als normales "�" dargestellt.
Delphi-Quellcode:
Kann hier jemand Abhilfe schaffen?
with http do begin
HandleRedirects := True; AllowCookies := False; RedirectMaximum := 10; Request.UserAgent := useragent; Request.Accept := 'text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1'; Request.AcceptCharSet := 'iso-8859-1, utf-8, utf-16, *;q=0.1'; Request.ContentEncoding := 'UTF-8'; Request.ContentType := 'application/x-www-form-urlencoded'; end; source := (http.Get( url) ); |
AW: Indy.get Umlaute = ?
Welche Delphiversion?
Bekommst Du mit http.get auf jeden Fall auch UTF8? Wenn nein, dann nur UTF8ToAnsi nutzen, wenn es auch tatsächlich UTF8 ist, was da ankommt. Im Ansizeichensatz sind nicht alle Zeichen enthalten, die es in UTF8 gibt. Die fehlenden Zeichen werden dann (meist) als ? dargestellt. Welche Fehler erhältst Du, wenn Du es nur mit source := http.Get(url) versuchst? |
AW: Indy.get Umlaute = ?
Ich htte grad den Eintrag editiert gehabt, wie es ohne Umwandlung aussieht.
Delphi 10.1 wird benutzt. |
AW: Indy.get Umlaute = ?
Darf man den Inhalt von url erfahren? Dann könnte man mal nachschauen, wie es da genau aussieht, so ist das etwas schwierig.
Oder mal ein Beispiel von dem, was hinter url steckt (unbearbeitet als Anhang), hier zur Verfügung stellen. |
AW: Indy.get Umlaute = ?
|
AW: Indy.get Umlaute = ?
Welches charset hat denn die Seite?
|
AW: Indy.get Umlaute = ?
<meta charset="utf-8">
|
AW: Indy.get Umlaute = ?
Komisch. Andere Seiten mit UTF-8 funktionieren bei mir, diese nicht.
|
AW: Indy.get Umlaute = ?
Liste der Anhänge anzeigen (Anzahl: 1)
Also hast du das gleiche Problem bei dieser Webseite?
|
AW: Indy.get Umlaute = ?
Der Unterschied zwischen dieser und der anderen (die funktioniert) ist, dass die andere echtes UTF-8 liefert, d.h. da steht auch z.B. "ö" drin. Bei deiner steht "ö"
|
AW: Indy.get Umlaute = ?
Habe ein Post vorher nun ein Bild angehangen, welches die übermittelten Daten ausgibt, dort ist von utf-8 nichts zu sehen. hm
|
AW: Indy.get Umlaute = ?
Ausgehend vom META-Tag bekommt man UTF-8.
Allerdings sind da die deutschen Umlaute auch ohne Umwandlung von UTF-8 nach Ansi enthalten. Ferienwohnungen, Ferienhäuser, Zimmervermietung, Pension, Gästezimmer Aber auch in dieser Form: Allgemeine Geschäftsbedingungen Wenn man von einigen Syntaxfehlern im HTML absieht, sollte man eigentlich ohne Umwandlung von UTF-8 nach irgendwas auskommen. Ist diese Umwandlung denn bei Delphi 10.1 überhaupt noch nötig? Mit Delphi 7 und ohne Rücksichtnahme auf den Zeichensatz, bekomme ich eine (zeichensatzmäßig) fehlerfreie Textdatei. Der Zeichzensatz dürfte iso-8859-1 sein. ö hat nichts mit UFT-8 zu tuen (siehe ![]() |
AW: Indy.get Umlaute = ?
Wie hast du denn http.get aufgebaut, denn bei mir erhalte ich wie gesagt keinen anständigen Text
|
AW: Indy.get Umlaute = ?
Accept = text/html, */*.
Sonst nichts. Bitte speichere Dein Ergebnis, zippe es und häng das dann hier mal an, möchte da mal reinschauen. Wenn möglich beide Versionen:
Delphi-Quellcode:
und
source := http.Get(url);
Delphi-Quellcode:
source := UTF8ToAnsi(http.Get(url));
|
AW: Indy.get Umlaute = ?
Habe gerade mal das angehängte Bild angeschaut:
Da steht, dass Charset iso-8859-1 geliefert wird. Content-Type ist ebenfalls iso-8859-1. Die Angabe im Meta-Tag dürfte demnach falsch sein. |
AW: Indy.get Umlaute = ?
Delphi-Quellcode:
Wenn ich es wie oben per Stream lade, funktioniert es, anders jedoch nicht.
resp := TMemoryStream.Create;
try with http do begin HandleRedirects := True; AllowCookies := False; RedirectMaximum := 10; end; http.Get( url, resp ); resp.Position := 0; slSource := TStringList.Create; try slSource.LoadFromStream(resp); source := slSource.Text; finally FreeAndNil(slSource); end; Result := source; finally resp.Free; end; |
AW: Indy.get Umlaute = ?
Ich glaube hier könnten die "Delphi-Profis" helfen
- Uwe Raabe bzw. - Maverik |
AW: Indy.get Umlaute = ?
Liest du die Berlin Webseite nur oder bis du Besitzer und hast somit Einfluss darauf wie sie abgespeichert ist?
Wenn ich deine Seite mit Chrome runterlade und dann im Editor öffne und unter Codierung nachsehe dann lese ich ANSI und nicht UTF-8 (wie bei ca. 90% aller Webseiten dieser Welt). Falls du Einfluss auf die Webseite hast, dann speichere eine "öäü Test-Webseite" mal mit Codierung UTF-8 ab und checke, ob's nun klappt. [Nebenbei: Ich habe auch noch alte ANSI codiert abgespeicherte Webseiten mit Formularen drauf. Bis mind. D X6 konnte man die Werte der übermittelten Felder locker mit TWebRequest.Contentfields auslesen. Bei späteren Delphis crasht das CGI bei Zugriff auf die ContenFields; Abhilfe: Webseiten UTF-8 codiert speichern oder wenn man nicht alles von ANSI auf UTF-8 umstellen mag Request.RawContent...] |
AW: Indy.get Umlaute = ?
Zum Glück (oder eher leider) sind Browser sehr Fehlertolerant und versuchen massig Schrott auszumärzen.
Sonst würden viele Webseiten garnicht angezeigt werden und man sähe ständig nur Fehlermeldungen. Tja, da hat man nun Probleme eine Webseite auszulesen. Aber besser wäre es eh, wenn man eine offizielle Schnittstelle/API zu den gewünschten Daten verwenden würde, wenn der Seitenbetreiber sowas anbietet. Die Delphi-PRAXiS kann man so z.B. problemlos per XML auslesen und muß die Informationen nicht mitten im HTML suchen. :stupid: |
AW: Indy.get Umlaute = ?
Ich hab's rasch auf einem meiner Webserver gecheckt.
Wie vermutet: Speichere deine Webseite statt mit Codierung ANSI mit UTF-8 ab, dann werden die Umlaute korrekt angezeigt, d.h.: Lade die Webseite in einen Editor [wenn du ein neueres Windows hast, geht's auch mit dem "normalen" Editor von Windows], wähle Codierung UTF8 und speichere die Seite wieder ab. Lade sie hoch - und staune :-D. Wenn du keinen Zugriff hast auf die Webseite dann müsstest du die heruntergeladene Seite umcodieren [Ich weiss, es gibt direktere Wege ;-)]: hs := TStringList.Create; hs.LoadFromFile( webseite, TEncoding.ANSI ); hs.SaveToFile( webseite, TEncoding.UTF8 ); und dann klappt es auch. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02: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