![]() |
Socket Memo Umlaute
Hallo,
im Memo werden die Umlaute richtig dargestellt, aber nicht übertragen! Es wird immer ein ? dargestellt. Warum?
Delphi-Quellcode:
var
s: AnsiString; begin try ClientSocket.Open; s := String.Format('<event>'#10'<address>%s</address>'#10'<message>%s</message>'#10'</event>',[Edit1.Text,Memo4.Text]); ClientSocket.Socket.SendText(s); finally ClientSocket.Close; Disconnect.Enabled := true; |
AW: Socket Memo Umlaute
SendText arbeitet mit AnsiStrings.
Du musst dir eine Codierung überlegen (z.B. UTF8) die keinen Datenverlust bei der Wandlung nach Ansi-Strings verursacht und dam beim Empfänger wieder zurückwandeln. Übrigens wäre es ganz gut wenn man Compilerwarnungen beachtet. Dies solltest du bekommen wenn du eine halbwegs aktuelle Delphi-Version (ab D2009) verwendest. |
AW: Socket Memo Umlaute
Hey,
habe Delphi Xe7 im Betrieb .... aber der String(s) ist doch ein AnsiString! ist doch Formatiert (Utf8Encode) oder nicht? Wie könnte so eine Umwandlung aussehen? |
AW: Socket Memo Umlaute
String -> Codieren mit UTF8 in einen Stream -> Senden
Empfangen -> Stream -> Decodieren mit UTF8 in einen String ![]() |
AW: Socket Memo Umlaute
Zitat:
AnsiString := Unicode ergibt doch meines Wissen kein UTF8-Code! Und Edit1.Text,Memo4.Text sind UniCode und können Zeichen enthalten, welche nicht nach ANSI übertragen werden können, dann gibt es glaube ich die '?'... Mach mal
Delphi-Quellcode:
s := Utf8Encode(String.Format('<event>'#10'<address>%s</address>'#10'<message>%s</message>'#10'</event>',[Edit1.Text,Memo4.Text]));
Denn String.Format sollte bei Dir nen UniCode-String liefern.. |
AW: Socket Memo Umlaute
Außerdem ist das kein XML, sondern sieht nur so aus. Die Gegenstelle muss wissen, das UTF-8 verwendet wird (oder sonst eine Codierung). Dann kann man auch gleich auf XML verzichten und das mit einem selbstgestrickten Format versenden (wieso nicht binär oder als ZIP?). Oder JSON, dann fällt wenigstens der Overhead von XML weg.
|
AW: Socket Memo Umlaute
Hallo,
die Meldungen sollen im XML-Format (UTF-8) vorliegen. Wie muss der String dann ausehen?
Delphi-Quellcode:
s := Utf8Encode(String.Format('<event>'#10'<address>%s</address>'#10'<message>%s</message>'#10'</event>',[Edit1.Text,Memo4.Text]));
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 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 by Thomas Breitkreuz