Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TIdTCPServer und -Client Umlaute ohne Punkte (https://www.delphipraxis.net/139841-tidtcpserver-und-client-umlaute-ohne-punkte.html)

Meta777 6. Sep 2009 19:02


TIdTCPServer und -Client Umlaute ohne Punkte
 
Hallo allerseits,

habe grad das Problem, dass mit 'ner aktuelleren Indy-Version - vom 29.07.2009 - die Umlaute ihre Punkte verlieren.
Es wird von einem TIdTCPClient ein String versendet, dem am Server die besagten Umlautpunkte fehlen. Muss "neuerdings" noch etwas "eingestellt" werden?
Ein "Auf-Gut-Glück"-Update möchte ich erstma vermeiden, nicht jedoch wenn mir einer sagen kann, das dieses Problem damit behoben ist :-)

Shalom

Valle 6. Sep 2009 19:58

Re: TIdTCPServer und -Client Umlaute ohne Punkte
 
Heißt das, dass ein Ä zu einem A wird, ein ö zu einem o usw.? Das ist sehr eigenartig. Sind beide Programme (Client und Server) von dir programmiert? Beide mit der gleichen Delphi-Version (ist eine davon evtl. Delphi 2009)? Vielleicht zeigst du und mal einige Zeilen Code, die zum senden und empfangen der Daten dienen.

Mit freundlichen Grüßen,

Valle

XXcD 6. Sep 2009 20:38

Re: TIdTCPServer und -Client Umlaute ohne Punkte
 
Falls du Delphi 2009 nutzt dann versuch das mal mit AnsiString anstatt string

Meta777 16. Sep 2009 21:59

Re: TIdTCPServer und -Client Umlaute ohne Punkte
 
Hallo,

danke für die antworten. ich habe mal etwas zeit gefunden mich wieder dem problem zuzuwenden... :roll:

@XXcD: Hatte erst Delphi 2009 benutzt, sind aber wieder auf Delphi 7 umgestiegen - jedoch wurde in diesem Zug auch die Indy geupdatet...
@Valle: korrekt ü -> u, Ä -> A usw. Beide von mir in Delphi 7 geschrieben.

Es hat was mit dem Indy update zu tun (Client und Server liefen vorher ohne diese Problem). Ich konnte auch die Sourcezeile lokalisieren. In der Unit IdGlobal Line 1555:

Delphi-Quellcode:
class function TIdTextEncoding.Convert(ASource, ADestination: TIdTextEncoding; const ABytes: TIdBytes): TIdBytes;
begin
  Result := ADestination.GetBytes(ASource.GetChars(ABytes));
end;
Der TIdTCPClient - genauer gesagt TIdTCPConnection - ruft diese function vor dem senden auf. So wird aus
78, 97, 109, 101, 61, 77, 252, 108, 108, 101, 114, ....
78, 97, 109, 101, 61, 77, 117, 108, 108, 101, 114, ....


Stack*:

TIdTextEncoding.Convert($7EA2E10,$7EA2DD0,(78, 97, 109, 101, 61, 77, 252, 108, 108, 101, 114, xxxxx))
ToBytes('Name=Müllerxxxxx'#$D#$A,-1,1,$7EA2DD0,$7EA2E10)
TIdIOHandler.Write('Name=Müllerxxxxx'#$D#$A,$7EA2D D0,$7EA2E10)
TIdIOHandler.WriteLn('Name=Müllerxxxxx',$7EA2DD0,$ 7EA2E10)
TIdIOHandler.WriteLnRFC('Name=Müllerxxxxx',$7EA2DD 0,$7EA2E10)
TIdIOHandler.WriteRFCStrings($6D36508,True,$7EA2DD 0,$7EA2E10)
TIdTCPConnection.WriteRFCStrings($6D36508)

*Name teilweise ge-xt ^^


Wie geht das mit den Encoding? Wo stellt man das ein?


Danke und Shalom

Meta777 16. Sep 2009 22:17

Re: TIdTCPServer und -Client Umlaute ohne Punkte
 
okay habs.

im IOHandler gibs das Property "DefStringEncoding", das per default auf ASCII (7Bit) steht. Dieses muss vor dem schreiben bzw. lesen entsprechend geändert werden.
In meinem Fall auf "en8Bit".

Be belessed


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