1. 程式人生 > >解決傳送字元時,中文亂碼現象

解決傳送字元時,中文亂碼現象

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

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

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

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

這裡提供另外一種方式:

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

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

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

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

反正自己試試吧哈哈。