【发布时间】:2012-02-04 09:33:27
【问题描述】:
我在使用 idTCPClient 从 telnet 服务器读取缓冲区的以下代码中遇到问题:
procedure TForm2.ReadTimerTimer(Sender: TObject);
var
S: String;
begin
if IdTCPClient.IOHandler.InputBufferIsEmpty then
begin
IdTCPClient.IOHandler.CheckForDataOnSource(10);
if IdTCPClient.IOHandler.InputBufferIsEmpty then Exit;
end;
s := idTCPClient.IOHandler.InputBufferAsString(TEncoding.UTF8);
CheckText(S);
end;
此过程每 1000 毫秒运行一次,当缓冲区有一个值 CheckText 时调用。
此代码有效,但有时会将空缓冲区返回给 CheckText。
有什么问题?
谢谢
【问题讨论】:
-
我可以通过删除 InputbufferAsString 中的编码类型来解决这个问题。但是接收到的文本包含 UTF8 文本,在显示我的程序时我有 "YX'Y Z)X'X1X(X1[ X.YX/ X1X' YX'X1X/ Z)Y[X/: Z)YYY X9X(YX1:" text :-( , 请帮帮我
-
一个问题,你为什么不用TidTelnet?这显然是由 telnet 控制字符引起的……
-
因为 idTelnet 不支持 UTF8,而且我想对缓冲区文本进行一些处理,并可能在显示之前对其进行更改。
-
这不是不使用
TIdTelnet的正当理由。它不关心文本编码。它的OnDataAvailable事件使用TIdBytes将原始字节传递给您。如果你想在String中使用它,你必须在从TIdTelnet收到它后自己复制/解码。
标签: delphi telnet tcpclient indy