Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   UTF-8-Konvertierung Memo (https://www.delphipraxis.net/189606-utf-8-konvertierung-memo.html)

strom 29. Jun 2016 08:46

UTF-8-Konvertierung Memo
 
hallo, möchte gerne, dass alle Umlaute richtig im Memo angezeigt werden!

Delphi-Quellcode:
 var
  MSG: String;
    i: integer;
begin
 Memo1.Clear;
  MSG := Socket.ReceiveText;
   Memo1.Text := (MSG)TEncoding.UTF8; // was muss ich hier ändern, dass die Umlaute richtig Angezeigt werden?
   Memo2.Text := Memo1.Lines[8];
   Memo2.Text := StringReplace(Memo2.Text,'<message>','',[rfReplaceAll]);
   Memo2.Text := StringReplace(Memo2.Text,'</message>','',[rfReplaceAll]);
   Memo2.Text := StringReplace(Memo2.Text,'<message />','',[rfReplaceAll]);
   StringGrid1.RowCount := StringGrid1.RowCount + 1;
  for i := StringGrid1.RowCount - 1 downto StringGrid1.FixedRows + 1 do
   StringGrid1.Rows [i].Assign (StringGrid1.Rows [i - 1]);
   StringGrid1.Rows [StringGrid1.FixedRows].Clear;
   StringGrid1.Cells [1,1] := FormatDateTime ('dd.mm.yyyy', Now);
   StringGrid1.Cells [2,1] := FormatDateTime ('hh:nn:ss', Now);

nahpets 29. Jun 2016 10:03

AW: UTF-8-Konvertierung Memo
 
Welche Delphiversion?

Unter Delphi 7 mach' ich es mit
Delphi-Quellcode:
Memo1.Text := Utf8Decode(UTF8String);

himitsu 29. Jun 2016 10:14

AW: UTF-8-Konvertierung Memo
 
Welche Delphi Version? (OK, TEncoding läßt fast schon auf was Neueres schließen)
Bei D2009+ und wenn und du das direkt in eine String-Variable (UnicodeString) kopierst, dann wird das bereits nach Unicode umcodiert
und das danach nochmal umzukodieren kann nur schief gehen.

Und hast du dir mal angesehn, was TEncoding für Methoden hat?
TEncoding.UTF8.Get......
Da gibt es garantiert was, wo man einen "AnsiString" (RawByteString) rein geben kann und als Result einen String (UnicodeString) raus bekommt. :stupid:



Und wenn ich die vielen StringReplace sehe und auch noch einen festen Zeilenindex, dann hab ich das Gefühl hier geht etwas schief.
Man versucht das Result als TEXT auszuwerten, obwohl es wohl eher sowas wie XML? sein könnte, wofür es Komponenten gibt, die das verstehen und richtig konvertieren/verarbeiten könnten.

Uwe Raabe 29. Jun 2016 11:31

AW: UTF-8-Konvertierung Memo
 
Ich denke mal, die Konvertierung geschieht schon implizit bei der Zuweisung zu MSG. Da ReceiveText als AnsiString deklariert ist, wird dabei die aktuelle CodePage verwendet. Wenn die empfangenen Daten aber UTF-8 sind, dann könnte folgender Ansatz helfen (getestet in Delphi Berlin):

Delphi-Quellcode:
   MSG := UTF8ToString(Socket.ReceiveText);
   Memo1.Text := MSG;

strom 29. Jun 2016 15:35

AW: UTF-8-Konvertierung Memo
 
hallo Uwe,

es geht! Danke :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz