Indy 9 不支持编码,也不支持用于 Unicode 的 Delphi 2009+。Indy 9 中的所有内容都假设/仅基于AnsiString
。字符串按原样传输,就好像它们是原始字节数组一样。
因此,不要AnsiString
通过使用 ANSI 的连接发送数据。您可以改为以 UTF-8 格式发送/接收它。您只需要AnsiString
手动编码/解码数据,仅此而已。Indy 9 将按原样发送 UTF-8 编码AnsiString
,并按原样读取 UTF-8 编码AnsiString
。AnsiString
然后,您可以根据周围代码中的需要对数据进出 UTF-8 进行编码/解码。
例如,您的 Indy 9 客户端可以这样做:
IdTCPClient1.WriteLn(UTF8Encode('Some Unicode String Here'));
...
S := UTF8Decode(IdTCPClient1.ReadLn);
然后你的 Indy 10 服务器可以这样做:
AContext.Connection.IOHandler.DefStringEncoding := TIdTextEncoding.UTF8;
...
S := AContext.Connection.IOHandler.ReadLn;
...
AContext.Connection.IOHandler.WriteLn(...);