Hi romber,
Zitat von
romber:
Ich sende mit IdHTTP Anfragen an einen Webservice an und erhalte die Daten, die auch
Unicode-Zeichen enthalten. Diese Zeichen gehen verloren und werden durch Fragezeichen ersetzt. Wie empfange ich die
Unicode-Daten richtig?
Zitat von
romber:
Leute! Hilfe! Was muss ich dem IdHTTP beibringen, damit er
Unicode-Seiten richtig liefert?
Nichts. Hat auch nichts mit
Indy zu tun: Schau Dir ggf. mal die Delphi Hilfe in Delphi 2009/2010 für TStringStream.Create() an:
Per Default sind StringStreams & Co mit Encoding vom Typ TEncoding.ASCII erzeugt.
Du erzeugst also einen
ASCII (!) StringStream und füllst diesen mit
Unicode Daten (in diesem Fall wahrscheinlich UTF8). Das das jetzt
Indy ist, was den Stream füllt, ist für das Problem egal.
Delphi-Quellcode:
ResponseStream := TStringStream.Create('', TEncoding.UTF8); // <-- Encoding setzten!
RequestStream := TStringStream.Create; // hier ggf. auch
RequestStream.WriteString(SERVICE_REQUEST_XML);
try
http.Post(WEB_SERVICE_URL, RequestStream, ResponseStream);
except
...
end;
[Abschweifen]
Du hast hier an verschiedenen Stellen mögliche Encodings:
Client:
- RequestStream (Delphi)
- RepsonseStream (Delphi)
- HTTP Transfer Klasse (Indy)
Server
- Webseiten Encoding
- Form Encoding (kann von Webseitenencoding abweichen!)
Beiseitig:
- Das Datei Encoding des XML und zusätzlich auch das Inline Encoding (aus dem XML Tag)
Um die Verwirrung komplett zu machen, gibt es in Indy auch noch die Content Charsets und Encodings.
[/Abschweifen]
Hab aber gerade Deinen Code getestet - funktioniert mit UTF8 ohne Probleme.
Gruß Assertor