Autor Beitrag
stiftmaster
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149



BeitragVerfasst: Mo 13.02.12 19:27 
Hallo,

ich verwendet Delphi 7 und steige gerade von Indy 9 auf Indy 10 um. Bisher habe ich problemlos folgende Code-Zeilen eingesetzt:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149



BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 14.02.12 15:32 
Schreibe das Ergebnis in einen Stream mit dem richtigen Encoding:
ausblenden Delphi-Quelltext
1:
ResultStream := TStringStream.Create('', SysUtils.TEncoding.GetEncoding('ISO-8859-1'));					

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
stiftmaster Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149



BeitragVerfasst: 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