Entwickler-Ecke
Internet / Netzwerk - TIdHttp 10 unter D7: Get-Funktion mit falschen Sonderzeichen
stiftmaster - Mo 13.02.12 19:27
Titel: TIdHttp 10 unter D7: Get-Funktion mit falschen Sonderzeichen
Hallo,
ich verwendet Delphi 7 und steige gerade von Indy 9 auf Indy 10 um. Bisher habe ich problemlos folgende Code-Zeilen eingesetzt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| var Indy: TIdHTTP; ergebnis: string; begin ... ergebnis := Indy.Get(url);
liste := TStringListe.Create; liste.clear; liste.Add(ergebnis); liste.SaveToFile('d:\test.txt'); ... end; |
Dies hat soweit immer problemlos funktioniert. Die URL ist immer die gleiche und an der Webseite hinter der URL hat sich auch nichts geändert. Mit Indy 9 wurden auch die Sonderzeichen "üÜäÄ..." richtig angezeigt. Unter Verwendung von Indy 10 erscheint an Stelle des Sonderzeichen ein Fragezeichen.
Ich vermute, dass irgendetwas mit dem Encoding nicht stimmt - habe nämlich im Netz gelesen, dass Indy 10 dies automatisch setzt; aber leider nichts, wie ich es deaktiviere bzw. das Encoding selber setzen kann.
Hat jemand einen Tipp, wie ich das "Indy 9"-Verhalten wieder herstellen kann, denn ohne Sonderzeichen lebt es sich schwer :-)
Bin für jeden Tipp dankbar!
Gruß
Stefan
stiftmaster - Di 14.02.12 13:34
Hallo,
wenn ich meine Testseite im FireFox öffne und mir dann die unter "Extras" die "Seiteninformationen" anschaue, dann steht dort:
Typ: text/html
Anzeigemodus: Kompatibilitätsmodus (Quirks)
Kodierung ISO-8859-1
Daher habe ich meine Code folgendermaßen erweitert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| Indy := TIndy.Create(nil);
Indy.Request.ContentEncoding := 'ISO-8859-1'; Indy.Request.CharSet := 'ISO-8859-1'; Indy.Request.ContentType := 'text/html';
Memo1.Text := Indy.Get('http://test-server/index.php'); |
Leider bringt auch dies kein Ergebnis. Wechsel ich dann die Indy-Version wieder von 10 auf 9, dann läuft es direkt und ohne Probleme - auch ohne Angabe von ContentEncoding, CharSet und ContentType :-)
Bin für jeden Tipp dankbar
Gruß
Stefan
Nersgatt - Di 14.02.12 15:32
Schreibe das Ergebnis in einen Stream mit dem richtigen Encoding:
Delphi-Quelltext
1:
| ResultStream := TStringStream.Create('', SysUtils.TEncoding.GetEncoding('ISO-8859-1')); |
stiftmaster - Do 16.02.12 20:25
Hi,
vielen Dank für deinen Tipp. Leider hab ich keinen Plan, wie das gehen soll :-( Folgendes habe ich bereits versucht
Ich habe die Variable "ResultStream: TStringStream" angelegt - soweit so gut. Wenn ich dann das Create wie beschrieben eingebe, dann meckert Delphi 7, da Create nur eine Variable hat - nämlich einen String-Wert, allerdings keinen zweiten vom Typ TEncoding.
Den Get-Befehl habe ich dann wie folgt geändert: Indy.Get('http://test-server/index.php', ResultStream);
Doch wie wandel ich jetzt den TStringStream in einen "normalen" String um, so dass ich diesen an mein Memo übergeben kann: Memo1.Text := StringStreamToString(ResultStream) => irgend so was, oder nicht?
Bin für jeden weiteren Tipp sehr dankbar!
Gruß
Stefan
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!