我有一个使用Indy 9的Delphi 7应用程序,它将一个TIdTCPClient连接到使用Indy10.5的Delphi XE2应用程序中的一个TIdTCPServer。
要在Indy 10中将TIdTCPClient中的文本编码设置为UTF-8,我可以使用以下方法:
TCPClient.IOHandler.DefStringEncoding := TIdTextEncoding.UTF8;如何在Indy 9中将文本编码设置为UTF-8,因为在DefStringEncoding中没有IOHandler属性。
发布于 2014-12-30 18:43:39
Indy 9不支持编码,也不支持Unicode的Delphi。Indy 9中的所有内容都假定/仅基于AnsiString。字符串以-is方式传输,就好像它们是原始字节数组一样。
因此,不要使用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(...);发布于 2014-12-29 19:13:04
我还没有找到在Indy 9中设置编码UTF8的方法,然后决定如下:知道Indy 9 TCPClient中的默认编码是ANSI,我在TCPServer应用程序中将编码配置为ANSI,在从TCPserver到TCPClient的通信之前将任何UTF8字符串转换为ANSI,并将其全部解析。
https://stackoverflow.com/questions/27691988
复制相似问题