Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Problem mit Textcodierung bei Indy TCP Client / Server (https://www.delphipraxis.net/213175-problem-mit-textcodierung-bei-indy-tcp-client-server.html)

AndyK 9. Jun 2023 20:45

Problem mit Textcodierung bei Indy TCP Client / Server
 
Hallo,

ich arbeite derzeit an zwei Anwendungen, die die Indy TCP-Komponenten nutzen. Nach Empfang von "einfachen" Texten fällt auf, dass bestimmte Zeichen nicht korrekt dargestellt werden. Ich habe versucht, diese mittels
Delphi-Quellcode:
indytextencoding_xxx
korrekt darzustellen - leider bislang erfolglos.

Mein Wissensstand ist, dass Indy ANSI-kodiert arbeitet, wenn nichts anderes ausgewählt. Richtig? Aktuell geht es um Anführungszeichen und Umlaute, die als Fragezeichen (?) dargestellt werden.

Text wird so verschickt:
Delphi-Quellcode:
IdTCPClient.IOHandler.WriteLn('Text mit Umlauten innerhalb von Anführungszeichen: "öäü"');


Hierüber wird "gelesen":
Delphi-Quellcode:
Ausgabestring := IdTCPClient.IOHandler.ReadLn();


Der "Ausgabestring" zeigt sich dann wie folgt: "Text mit Umlauten innerhalb von Anführungszeichen: ?????"

Ich bin ehrlich gesagt, auch nach etlichen Seiten lesen, nicht wirklich klüger was Textcodierungen angeht :oops: Hätte jemand Gedanken hierzu, wie ich das lösen kann?

Besten Dank
Gruß
Andy

Delphi 10.4
Indy 10.6.2.0

Klaus01 11. Jun 2023 14:21

AW: Problem mit Textcodierung bei Indy TCP Client / Server
 
.. merkwürdig, dass das 'ü' in Anführungszeichen richtig übertragen wurde.

Grüße
Klaus

AndyK 11. Jun 2023 14:31

AW: Problem mit Textcodierung bei Indy TCP Client / Server
 
:lol:Das passiert, wenn man es per Hand eintipp. Natürlich ist jedes "ü" fehlerhaft...

jaenicke 11. Jun 2023 17:23

AW: Problem mit Textcodierung bei Indy TCP Client / Server
 
Ich finde es komisch, dass das ohne Angabe eines Encodings nicht auf beiden Seiten mit dem gleichen Standardwert klappt. Du kannst es aber einmal explizit mit UTF-8 Kodierung versuchen. Readln und Writeln unterstützen beide als zweiten Parameter das Encoding, z.B. würde ich es mit IndyTextEncoding_UTF8 aus der Unit IdGlobal versuchen und das bei beiden Funktionen übergeben.

arcticwolf 11. Jun 2023 18:40

AW: Problem mit Textcodierung bei Indy TCP Client / Server
 
Ich würde vermuten es handelt sich bei deinem Problem um eine Codepage-Konvertierung. Wenn zum Beispiel ein String, welcher ein Euro-Zeichen (€) enthält, in die Codepage 850 konvertiert wird, steht an der Stelle des €-Zeichens ein Fragezeichen, weil die Codepage 850 kein €-Zeichen enthält.

So bringt folgendes Programm
Delphi-Quellcode:
Type AnsiStr720 = Type AnsiString(720);

Procedure Test;
Var
  uString : Unicodestring;
  aString : AnsiStr720;
begin
  uString := 'Text mit Umlauten innerhalb von Anführungszeichen: "öäü"';
  Writeln(uString);
  aString := uString;
  Writeln(aString);
end;
folgende Ausgabe
Code:
Text mit Umlauten innerhalb von Anführungszeichen: "öäü"
Text mit Umlauten innerhalb von Anf?hrungszeichen: "???"
weil es in der Codepage 720 (=Arabisch) keine Umlaute gibt.

Es könnte sich also bei Dir um eine Codepage handeln, die weder Umlaute noch das doppelte Anführungszeichen enthält um so ein Ergebnis wie von Dir beschrieben zu erhalten.

AndyK 12. Jun 2023 19:15

AW: Problem mit Textcodierung bei Indy TCP Client / Server
 
Hallo und danke für Eure Gedanken.
Ich habe nun im Test-Server, sowie Clienten auf
Delphi-Quellcode:
IndyTextEncoding_OSDefault
gestellt. Damit funktioniert es prima.

Gruß
Andy


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:12 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