1. 程式人生 > >解決IdTCPClient和IdTCPServer通訊中文亂碼問題

解決IdTCPClient和IdTCPServer通訊中文亂碼問題

這種問題的本質其實就是字元編碼問題,只要統一下客戶端和伺服器的字元編碼就行。

網上的解決辦法一種就是用base64編碼後傳送,然後另一端解碼。

另一種就是在readln和writeln時統一編碼格式。如這裡回答的:

//客戶端寫,讀類似
IdTCPClient1.IOHandler.WriteLn(“XXXXX”,TEncoding.UTF8);
//伺服器讀,寫類似
str := AContext.Connection.IOHandler.ReadLn(TEncoding.UTF8);

這裡提供另外一種方式:

其實只要一開始設定下IOHanger的DefStringEncoding屬性就行了。

uses
     IdGlobal;     //注意要引用這個
//客戶端初始化時設定DefStringEncoding
IdTCPClient1.IOHandler.DefStringEncoding := IndyTextEncoding_UTF8();
//伺服器在Connect事件中加上
procedure TmyServerForm.IdTCPServer1Connect(AContext: TIdContext);
begin
  AContext.Connection.IOHandler.DefStringEncoding := IndyTextEncoding_UTF8();
end;

這裡的TEncoding和IndyTextEncoding不用太在意,試試就知道用哪個了。

包括DefStringEncoding屬性在哪可能也會由於版本和VCL還是FMX而不同。

反正自己試試吧哈哈。