Delphi 印地10编码
今天早上我遇到了一个问题,根本解决不了。我正在尝试将答复消息从TIdCmdTCPServer发送到TidCpClient,但收到的是“?”字符,其中消息显示非ANSCII字符。我发现印地使用ASCII编码,并试图改变它,但没有结果。代码如下:Delphi 印地10编码,delphi,indy,indy10,Delphi,Indy,Indy10,今天早上我遇到了一个问题,根本解决不了。我正在尝试将答复消息从TIdCmdTCPServer发送到TidCpClient,但收到的是“?”字符,其中消息显示非ANSCII字符。我发现印地使用ASCII编码,并试图改变它,但没有结果。代码如下: uses IdIOHandler, IdGlobal; procedure TDMSocket.DataModuleCreate(Sender: TObject); begin TIdIOHandler.DefStringEncoding:= TId
uses IdIOHandler, IdGlobal;
procedure TDMSocket.DataModuleCreate(Sender: TObject);
begin
TIdIOHandler.DefStringEncoding:= TIdTextEncoding.UTF8;
end;
procedure TDMSocket.IdCmdTCPServerLoginCommand(ASender: TIdCommand);
begin
[...]
InformaErros('Usuário ou senha inválidos', ASender);
[...]
end;
procedure TDMSocket.InformaErros(Erro: string; ASender: TIdCommand);
begin
ASender.Reply.Text.Text:= Erro;
end;
这样,我得到以下错误:
此处无法访问属性“DefStringEncoding”
尝试访问IdCmdTCPServer的IOHandler属性上的DefStringEncoding会引发相同的错误。而我在GidDefaultAnsiceoding上没有取得任何成功
如何使用正确的字符发送消息?
DefStringEncoding
不是类的属性,这就是为什么您无法像尝试的那样通过TIdIOHandler
类类型访问它。它是一个实例属性,因此需要指向TIdIOHandler
对象实例的指针
在OnCommand
事件中,您可以通过TIdCommand.Context.Connection.IOHandler
属性访问TIdIOHandler
对象
如果您的所有命令和回复都将使用UTF-8,那么最好在客户端连接到服务器时设置一次DefStringEncoding
。您可以通过TIdContext.Connection.IOHandler
属性在OnConnect
事件中执行此操作
至于GidDefaultAnciencoding
,TIdIOHandler
仅在DefStringEncoding
为零时使用它,默认情况下不是这样(在初始化DefStringEncoding
时,有一个TODO项要使TIdIOHandler
使用GidDefaultAnciencoding
)