问题描述
我正在使用Delphi 10.3,并创建了一个TIdTcpserver
和一个客户端。
我发现像ÅÄÖ
这样的Unicode字符在发送时被更改了。
ContexClient.Connection.IOHandler.DefStringEncoding := IndyTextEncoding_UTF8;
ContexClient.Connection.IOHandler.WriteLn('abcÅÄÖ');
在上面的代码中,我尝试使用DefStringEncoding
属性进行修复,但是编译器找不到IndyTextEncoding_UTF8
。
我不知道该怎么做才能使它工作。
有什么主意吗?
解决方法
Indy的默认编码为US-ASCII。您可以在运行时使用Indy的GIdDefaultTextEncoding
单元中的IdGlobal
变量进行更改。例如,您可以将其设置为encUTF8
。
这就是为什么您看到非ASCII字符被更改的原因。使用TIdIOHandler.DefStringEncoding
属性是一种解决方案。 IndyTextEncoding_UTF8
在IdGlobal
单元中声明。确保将该单元添加到您的uses
子句中。
TIdIOHandler.WriteLn()
本身也具有可选的AByteEncoding
输入参数。如果是nil
,则使用DefStringEncoding
。如果也是nil
,则使用GIdDefaultTextEncoding
。