Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Socket Memo Umlaute (https://www.delphipraxis.net/187897-socket-memo-umlaute.html)

strom 13. Jan 2016 12:19

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;

Bernhard Geyer 13. Jan 2016 12:38

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.

strom 13. Jan 2016 12:52

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?

Sir Rufo 13. Jan 2016 13:52

AW: Socket Memo Umlaute
 
String -> Codieren mit UTF8 in einen Stream -> Senden
Empfangen -> Stream -> Decodieren mit UTF8 in einen String

Delphi-Referenz durchsuchenTStringStream

HolgerX 13. Jan 2016 19:16

AW: Socket Memo Umlaute
 
Zitat:

Zitat von strom (Beitrag 1326832)
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?

Hmm,
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..

Dejan Vu 14. Jan 2016 07:25

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.

strom 14. Jan 2016 22:15

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