Indy 9 TCP客户端文本编码

时间:2014-12-29 15:52:17

标签: encoding tcpclient indy indy-9

我有一个使用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属性?

2 个答案:

答案 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(...);