Hi,
ich habe noch kleinere Schwierigkeiten mit der Umstellung eines älteren Projekts auf
UniCode seit ich Delphi 2009 verwende. Ich sende mit einer
TClientSocket Komponente Text an einen Server. Die
SendText Prozedur im Client verlangt dabei als Parameter
const S: AnsiString, was mir ganz recht ist, da ich ausschließlich
Ascii-Zeichen sende und in meinem Projekt eigentlich keinen
Unicode brauche. Hier ein Minimalbeispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var D: AnsiString;
begin
D := 'Hallo!';
ClientSocket1.Socket.SendText(D); { SendText(const S: AnsiString) }
end;
Daraufhin empfängt der Server den Text. Die
ReceiveText Funktion des Sockets liefert jedoch keinen
AnsiString, sondern einen
String zurück, was ja nun
UniCode sein sollte.
Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var D: String;
begin
D := Socket.ReceiveText; { ReceiveText: String }
showmessage(D); // gibt Mist aus (chinesische Zeichen wenn ich mich nicht irre)
showmessage(AnsiString(D)); // gibt auch Mist aus ('???ton' oder so ähnlich)
end;
Lediglich die Länge des Strings stimmt. Ich habe ein bisschen rumprobiert, aber auch so klappt es nicht:
Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var D: AnsiString;
begin
D := AnsiString(Socket.ReceiveText);
showmessage(D); // gibt wie oben auch Mist aus
end;
Daraufhin habe ich mal die Strings als CharArray ausgeben lassen:
- Der Client
sendet 72, 97, 108, 108, 111, 33 ('Hallo!').
- Der Server
empfängt 24904, 27756, 8559, 116, 111, 110.
Kann jemand sagen was ich falsch mache, bzw wo ich den Code abändern muss um in der
TServerSocket Komponente den originalen Text 'Hallo!' zu bekommen? Am besten gleich als AnsiString
Viele Grüße und Danke für Tipps,
Xoric
"Gods are fragile things; they may be killed by a whiff of science or a dose of common sense."
- Chapman Cohen