解決IdTCPClient和IdTCPServer通訊中文亂碼問題
阿新 • • 發佈:2019-02-07
這種問題的本質其實就是字元編碼問題,只要統一下客戶端和伺服器的字元編碼就行。
網上的解決辦法一種就是用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而不同。
反正自己試試吧哈哈。