Einzelnen Beitrag anzeigen

Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#14

Re: Unicode-Daten richtig empfangen???

  Alt 22. Feb 2010, 17:55
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
Frederik
  Mit Zitat antworten Zitat