Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Unicode-Daten richtig empfangen??? (https://www.delphipraxis.net/148053-unicode-daten-richtig-empfangen.html)

romber 22. Feb 2010 10:41

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?

tinof 22. Feb 2010 13:49

Re: Unicode-Daten richtig empfangen???
 
Zitat:

Diese Zeichen gehen verloren und werden durch Fragezeichen ersetzt.
Wo? Im Debugger gesehen oder bei der Weiterverarbeitung - z.B. savetofile() o.ä.?

Für Savetofile() gibt es beispielsweise jetzt überladene Versionen, bei denen man das Encoding mit angeben kann, so in der Art

Delphi-Quellcode:
responsestream.savetofile('meinfile.txt',TEncoding.UTF8)
(Bitte in der Hilfe die genaue Syntax nachschlagen).


Viel Erfolg!

Tino

P.S. Unicode & Delphi9 und Indy 10x geht prinzipiell, es ist imho kein Bug oder Versionsproblem.

romber 22. Feb 2010 16:27

Re: Unicode-Daten richtig empfangen???
 
Zitat:

Zitat von tinof
Wo? Im Debugger gesehen oder bei der Weiterverarbeitung - z.B. savetofile() o.ä.?

Beim SaveToFile bekomme ich schon die Fragezeichen.
Es ist einfach zum k...zen mit diesem Unicode!
Leute! Hilfe! Was muss ich dem IdHTTP beibringen, damit er Unicode-Seiten richtig liefert?

Assertor 22. Feb 2010 16:55

Re: Unicode-Daten richtig empfangen???
 
Hi romber,

Zitat:

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:

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

romber 22. Feb 2010 21:40

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!

Assertor 23. Feb 2010 15:36

Re: Unicode-Daten richtig empfangen???
 
Hi romber,

Zitat:

Zitat von romber
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.

Das freut mich und danke für das Feedback!

Gruß,
Assertor

:dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:28 Uhr.
Seite 2 von 2     12   

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