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