0

我有一个使用 Indy 9 的 Delphi 7 应用程序,它使用 Indy 10.5 将 a 连接TIdTCPClientTIdTCPServerDelphi XE2 应用程序中的 a。

要在 Indy 10 中将文本编码设置为 UTF-8 TIdTCPClient,我可以使用以下命令:

TCPClient.IOHandler.DefStringEncoding := TIdTextEncoding.UTF8;

我如何在 Indy 9 中将文本编码设置为 UTF-8,DefStringEncoding因为IOHandler?

4

2 回答 2

0

我还没有找到在 Indy 9 中设置编码 UTF8 的方法,然后决定如下:知道 Indy 9 TCPClient 中的默认编码是 ANSI ,我在 TCPServer 应用程序中将编码配置为 ANSI,在通信之前将任何 UTF8 字符串转换为 ANSI从 TCPserver 到 TCPClient ,一切都解决了。

于 2014-12-29T19:13:04.590 回答
0

Indy 9 不支持编码,也不支持用于 Unicode 的 Delphi 2009+。Indy 9 中的所有内容都假设/仅基于AnsiString。字符串按原样传输,就好像它们是原始字节数组一样。

因此,不要AnsiString通过使用 ANSI 的连接发送数据。您可以改为以 UTF-8 格式发送/接收它。您只需要AnsiString手动编码/解码数据,仅此而已。Indy 9 将按原样发送 UTF-8 编码AnsiString,并按原样读取 UTF-8 编码AnsiStringAnsiString然后,您可以根据周围代码中的需要对数据进出 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-30T18:43:39.457 回答