我有一个使用Indy 9的Delphi 7应用程序,它使用Indy 10.5在Delphi XE2应用程序中将TIdTCPClient
连接到TIdTCPServer
。
要在Indy 10中的TIdTCPClient
中将文本编码设置为UTF-8,我可以使用:
TCPClient.IOHandler.DefStringEncoding := TIdTextEncoding.UTF8;
如何在Indy 9中将文本编码设置为UTF-8,因为DefStringEncoding
中没有IOHandler
属性?
答案 0 :(得分:0)
我还没有找到在Indy 9中设置编码UTF8的方法 决定如下:知道Indy 9 TCPClient中的默认编码是ANSI,我在TCPServer应用程序中配置了Encoding to ANSI,在从TCPserver到TCPClient的通信之前将任何UTF8字符串转换为ANSI,并将其全部解析。
答案 1 :(得分:0)
Indy 9不支持编码,也不支持Delphi 2009+ for Unicode。 Indy 9中的所有内容都假定/仅基于AnsiString
。字符串按原样传输,就好像它们是原始字节数组一样。
因此,请勿使用ANSI通过连接发送AnsiString
数据。您可以将其作为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(...);