![]() |
IdUDPServer: Probleme mit Sonderzeichen bei read
Hallo Zusammen,
ich nutze von den Indy-Komponenten den IdUDPServer. Soweit funktioniert alles. Nur hab ich das Problem, dass Sonderzeichen, wie z. B. das Eurozeichen (€) nicht richtig angezeigt werden. Als Fehlerquelle hab ich meine Read-Procedure ausgemacht.
Delphi-Quellcode:
Da ich nur ein Byte pro Zeichen lese, kommt bei Sonderzeichen Murks raus.
procedure TMainForm.IdUDPServerUDPRead(AThread: TIdUDPListenerThread;
AData: TArray<System.Byte>; ABinding: TIdSocketHandle); var S: String; begin SetString(S, PAnsiChar(@AData[0]), length(Adata)); InfoForm.InfoText := trim(S); end; Gibt es eine andere Möglichkeit? Ich konnte in der Zwischenzeit rausfinden, dass richtig gesendet wird. Konnte es mit PacketSender (packetsender.com) gegentesten. |
AW: IdUDPServer: Probleme mit Sonderzeichen bei read
|
AW: IdUDPServer: Probleme mit Sonderzeichen bei read
Delphi-Quellcode:
S := TEncoding.irgendwas.GetString(AData);
|
AW: IdUDPServer: Probleme mit Sonderzeichen bei read
Zitat:
Delphi-Quellcode:
)
S := TEncoding.UTF8.GetString(AData);
|
AW: IdUDPServer: Probleme mit Sonderzeichen bei read
Zitat:
Da es hier nun UTF-8 ist (was man im ersten Post ja nicht erahnen konnte), ist hier das Problem, dass dort der PAnsiChar als ANSI angesehn wird, anstatt UTF-8. Mit dem passenden String-Typen funktioniert aber auch das.
Delphi-Quellcode:
UTF-8 ist ja eine bestimmte ANSI-Codepage.
var
S: UTF8String; begin SetString(S, PAnsiChar(@AData[0]), length(Adata)); Somit schreibt SetString das als ANSI ByteCode da rein und beim Zuweisen an einen String/UnicodeString (hier ans Trim) wird dieser AnsiString-Typ dann entsprechend seiner CodePage (CP_UTF8) "richtig" dekodiert. Oder AnsiString-Variable mit ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 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