![]() |
Delphi XE2/Indy 10: Umlaute bei TidHTTP werden als ? angezeigt
Hallo,
ich frage per Indy-Komponente TidHTTP per Post Daten ab, die mir als XML-String zurück gegeben werden. Dabei gehe ich gemäß dem Tutorial ![]() Der Charset ist dabei ISO-8859-1, was ich auch im Source explizit setze:
Delphi-Quellcode:
Im ResponseStr steht z.B. statt München jedoch M?nchen, obwohl "über den Draht" vom Server der Hexwert fc, der bei ISO-8859-1 dem ü entspricht, geliefert wird - siehe Auszug aus einem WireShark-Netzwerkprotokollmitschnitt:
(...)
HTTPClient.Request.CharSet := 'ISO-8859-1'; Enc := CharsetToEncoding(HTTPClient.Request.CharSet); ResponseStr := HTTPClient.Post(RequestUrl, Params, Enc); (...) 0000 61 68 6e 3d 22 4d fc 6e 63 68 65 6e 20 28 44 45 ahn="M.nchen (DE Gleiches auch bei ö und ä. Ich tappse da jetzt völlig im Dunkeln, wie ich das Fragezeichen wegbekomme. Charsets habe ich schon eine ganze Reihe durch, ASCII, Ansi, diverse ISO-8859-Derivate usw. Hat jemand sonst noch eine Idee? Viele Grüße Udo "Kretabiker" Treichel |
AW: Delphi XE2/Indy 10: Umlaute bei TidHTTP werden als ? angezeigt
Also die Antwort vom Server wird nicht korrekt umgewandelt.
Du könntest schauen ob du AcceptCharSet gesetzt hast. Es könnte auch sein, dass der Server ein falsches CharSet (Response.CharSet) sendet und dies somit von Indy falsch umgewandelt wird. Dann müsstest du dies manuell korrigieren. Oder wenn du Zugriff zum Server hast schauen ob dies korrigieren kannst.
Delphi-Quellcode:
ReplyData := TMemoryStream.Create;
HTTPClient.Request.CharSet := 'ISO-8859-1'; Enc := CharsetToEncoding(HTTPClient.Request.CharSet); HTTPClient.Post(RequestUrl, Params, ReplyData, Enc); ReplyData.Position := 0; // statt Response.Charset kannst du dies jetzt beliebig anpassen ResponseStr := ReadStringAsCharset(ReplyData, Response.Charset); // mit ReplyData.DataString kommt du an den Quellcode Benutzt du die Version die mit XE2 installiert wurde oder eine aktuellere aus dem SVN. Also empfehle dir auf eine aktuelle aus dem SVN umzusteigen. |
AW: Delphi XE2/Indy 10: Umlaute bei TidHTTP werden als ? angezeigt
Hallo Sebastian,
sorry, hat eine Weile gedauert, bis ich mich wieder mit diesem Thema befassen konnte... Ich bin deinem Vorschlag gefolgt und setzte die Requests nun so ab wie von dir skizziert, um dann das Ergebnis aus dem MemoryStream mit ReadStringAsCharSet auszulesen - die Kodierung setze ich in diesem Fall manuell auf ISO-8859-1 -, und siehe da: das sind sie wieder, meine schmerzlich vermissten Umlaute... :-D Hat also funktioniert und ich habe wieder was gelernt! Danke dir für diesen wertvollen Tipp! Die Indyversion ist die von XE2 mitgelieferte. Eventuell ganz vielleicht werde ich eine neuere Version aus dem SVN ziehen, wie du empfiehlst. Allerdings fühle ich mich nicht so ganz wohl dabei, da hier auch noch RemObjects-Komponenten zum Einsatz kommen, da weiß ich nicht, was passiert, wenn ich eine andere Indy-Version einspiele. Es scheint aber etwas damit zu tun zu haben, denn in einem anderen Projekt unter D2007, das die gleiche Routine nutzt, trat das Problem bisher nicht auf. Danke dir für deine Hilfe Udo "Kretabiker" Treichel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:36 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