![]() |
Unicode-Daten richtig empfangen???
Hallo!
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?
Delphi-Quellcode:
ResponseStream := TStringStream.create;
RequestStream := TStringStream.Create; RequestStream.WriteString(SERVICE_REQUEST_XML); try http.Post(WEB_SERVICE_URL, RequestStream, ResponseStream); except ... end; |
Re: Unicode-Daten richtig empfangen???
Ist es die aktuelle Indy Version (10.5.7)?
|
Re: Unicode-Daten richtig empfangen???
Ganz aktuell ist die Version nicht. Es ist aber nicht die fehlerhafte Indy-Version, die mit Delphi 2009 ausgeliefert wurde.
|
Re: Unicode-Daten richtig empfangen???
Unterstützt die Version, die du benutzt denn schon Unicode?
|
Re: Unicode-Daten richtig empfangen???
Wie sieht die Response aus, steht dort ein Encoding, das auch zu den Daten passt?
Mit ![]() |
Re: Unicode-Daten richtig empfangen???
Zitat:
Zitat:
|
Re: Unicode-Daten richtig empfangen???
Ich habe gerade die neuste Indy-Version installiert, leider ist das Problem immer noch da.
|
Re: Unicode-Daten richtig empfangen???
Die HTTP Header sind in Ordnung? (Z.B. Content-Type)?
IdHTTP explizit auf HTTP 1.1 umstellen (siehe Hinweis in IdHTTP.pas) würde ich noch versuchen. |
Re: Unicode-Daten richtig empfangen???
Zitat:
Delphi-Quellcode:
Das 'encoding' ist ein Attribut und es steht in der XML-Deklaration (optional) ;)
<?xml version="1.0" [b]encoding="UTF-8"[/b] standalone="yes"?>
<verzeichnis> <titel>Wikipedia Städteverzeichnis</titel> <eintrag> <stichwort>Genf</stichwort> <eintragstext>Genf ist der Sitz von ...</eintragstext> </eintrag> <eintrag> <stichwort>Köln</stichwort> <eintragstext>Köln ist eine Stadt, die ...</eintragstext> </eintrag> </verzeichnis> Daneben gibt es in der Response eventuell auch noch eine Encoding Angabe im HTTP Header, die dazu passen muss. |
Re: Unicode-Daten richtig empfangen???
Zitat:
Eingentlich vertsehe ich das alles nicht ganz. Umlaute und sogar seltene spanische und französiche werden angezeigt, das sind doch auch alles Unicode-Zeichen, oder? Noch Ideen? |
Re: Unicode-Daten richtig empfangen???
Ich werde verrückt mit dieser Unicode, echt! Haben die aktuelle Indys immer noch Probleme mit Unicode oder wo liegt das Problem?
|
Re: Unicode-Daten richtig empfangen???
Zitat:
Für Savetofile() gibt es beispielsweise jetzt überladene Versionen, bei denen man das Encoding mit angeben kann, so in der Art
Delphi-Quellcode:
(Bitte in der Hilfe die genaue Syntax nachschlagen).
responsestream.savetofile('meinfile.txt',TEncoding.UTF8)
Viel Erfolg! Tino P.S. Unicode & Delphi9 und Indy 10x geht prinzipiell, es ist imho kein Bug oder Versionsproblem. |
Re: Unicode-Daten richtig empfangen???
Zitat:
Es ist einfach zum k...zen mit diesem Unicode! Leute! Hilfe! Was muss ich dem IdHTTP beibringen, damit er Unicode-Seiten richtig liefert? |
Re: Unicode-Daten richtig empfangen???
Hi romber,
Zitat:
Zitat:
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:
[Abschweifen]
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; 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 |
Re: Unicode-Daten richtig empfangen???
Super! An den Indys lag es wirklich nicht, habe umsonst geschimpft :-)
Habe der Stream das Encoding gesetzt, wie Assertor empfohlen hat, und schon ging's. Vielen Dank an alle! |
Re: Unicode-Daten richtig empfangen???
Hi romber,
Zitat:
Gruß, Assertor :dp: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz