Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Umlaute-Problem mit idHTTP.Get (Indy) => ö und Co. (https://www.delphipraxis.net/111148-umlaute-problem-mit-idhttp-get-indy-%3D-%E3%B6-und-co.html)

MCXSC 30. Mär 2008 16:50


Umlaute-Problem mit idHTTP.Get (Indy) => ö und Co.
 
Hallo,

ich habe folgenden Code:

Delphi-Quellcode:
var
  HTMLCode: TStringList;

[...]

function DownloadHTML(URL: String): String;
begin
  try
    Result := IndyHTTP.Get(URL);
  except
    Exit;
  end;
  Result := StringReplace(Result, #13, #13#10, [rfReplaceAll]);
end;
Damit lese ich also den HTML-Code einer URL aus. Jedoch habe ich das Problem, dass bei manchen Webseiten nur z.B. folgendes herauskommt:

Zitat:

Doch Elben und Menschen verbündeten sich und konnten Sauron schließlich bezwingen. Doch der Ring wurde nicht zerstört, sondern ging verloren, weswegen auch Sauron nicht vollständig besiegt wurde. Nach Hunderten von Jahren geriet der Ring in die Hände des Hobbits Bilbo Beutlin (Ian Holm), der an ihm nur die Fähigkeit nutzte, sich damit unsichtbar machen zu können. Doch als der Ring an seinen Neffen Frodo (Elijah Wood) übergeht, erahnt der Zauberer Gandalf (Ian McKellen), um was es sich bei dem Schmuckstück handelt. Da die finsteren neun Ringgeister, schwarze Reiter, bereits nach dem Ring Ausschau halten, rät Gandalf Frodo, den Ring in das Elbenheim Bruchtal zu bringen, wo über sein weiteres Schicksal entschieden werden soll. Also macht sich Frodo mit seinen Gefährten Sam (Sean Astin), Merry und Pippin auf die gefahrvolle Reise, auf der sie von dem geheimnisvollen Waldläufer Streicher (Viggo Mortensen) Hilfe finden. Doch das ist er der Auftakt zu einem großen Abenteuer, das zur Gründung der neunköpfigen Gemeinschaft des Rings führt, einer Abordnung, die Saurons Fluch zerstören soll...
Wie man sieht, "funktionieren" die Umlaute nicht korrekt. Das Problem tritt aber nicht bei allen URLs auf, sondern nur bei manchen (aber alles deutsche URLs).

Ich habe bisher keine Fehlerlösung gefunden... Hat hier vielleicht jemand eine Idee?

Have fun,
MCXSC

marabu 30. Mär 2008 16:53

Re: Umlaute-Problem mit idHTTP.Get (Indy) => ö und Co.
 
Hallo Marcel,

nicht alle HTML-Seiten werden gleich passend im Windows ANSI Code ausgeliefert (CP1252). Probiere es mal so:

Delphi-Quellcode:
// ...
    Result := Utf8ToAnsi(IndyHTTP.Get(URL));
// ...
Grüße vom marabu

Bernhard Geyer 30. Mär 2008 18:49

Re: Umlaute-Problem mit idHTTP.Get (Indy) => ö und Co.
 
Zitat:

Zitat von MCXSC
Ich habe bisher keine Fehlerlösung gefunden... Hat hier vielleicht jemand eine Idee?

Funktioniert doch. Die Dateien sind "nur" UTF8-Codiert und ist damit (wenn der Text in einer HTML-Datei verwendet wird und die Codierung korrekt angegebn ist) auch 100% in Ordnung.

MrKnogge 30. Mär 2008 19:05

Re: Umlaute-Problem mit idHTTP.Get (Indy) => ö und Co.
 
Muss man hier vor dem Aufruf von Utf8ToAnsi überprüfen, ob es utf8 kodiert ist, oder kann man bedenkenlos alles an die Funktion übergeben ?

marabu 30. Mär 2008 19:17

Re: Umlaute-Problem mit idHTTP.Get (Indy) => ö und Co.
 
Hallo Christian,

es liegt in der Natur der Sache, dass ein AnsiString stets beides enthalten kann. Die Erkennung der UTF-8 Lead-Bytes ist genau die Spezialität der Ansi-Funktionen - und auch Utf8ToAnsi() beherrscht das gut.

Freundliche Grüße

phXql 30. Mär 2008 19:40

Re: Umlaute-Problem mit idHTTP.Get (Indy) => ö und Co.
 
Wenn sie denn der Webserver ausliefert. Afaik kann der Internet Explorer nicht mit den BOMs umgehen.

Bernhard Geyer 30. Mär 2008 19:58

Re: Umlaute-Problem mit idHTTP.Get (Indy) => ö und Co.
 
Zitat:

Zitat von phXql
Wenn sie denn der Webserver ausliefert. Afaik kann der Internet Explorer nicht mit den BOMs umgehen.

Der Browser wird primär die Codierungsinformationen des HTTP-Response auswerten und danach die der HTML-Datei. AFAIK kommt er auch mit dem BOM zurecht, ignoriert ihn aber u.U.

MCXSC 30. Mär 2008 20:11

Re: Umlaute-Problem mit idHTTP.Get (Indy) => ö und Co.
 
Zitat:

Zitat von marabu
Delphi-Quellcode:
// ...
    Result := Utf8ToAnsi(IndyHTTP.Get(URL));
// ...

Danke, aber wenn ich das so mache, bekomme ich im weiteren Verlauf immer ein "Listenindex überschreitet das Maximum (-1)", da der String/die Stringlist anscheinend immer leer ist?

MrKnogge 30. Mär 2008 20:30

Re: Umlaute-Problem mit idHTTP.Get (Indy) => ö und Co.
 
Du hast oben zwar eine Stringlist deklariert, aber benutzt keine, zumindest nicht in dem Code den du gepostest hast.

Bernhard Geyer 30. Mär 2008 20:51

Re: Umlaute-Problem mit idHTTP.Get (Indy) => ö und Co.
 
Liste der Anhänge anzeigen (Anzahl: 1)
[Off-Topic]Thunderbird hat wohl etwas zu viel Automatismus bezüglich übereiliger UTF8-Decodierung eingebaut[/Off-Topic]


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz