【发布时间】:2016-10-22 17:52:31
【问题描述】:
这是我上一个问题here的后续问题。
许多命令和响应被编码为分隔字符串。 在 Delphi 7 中,这些通常使用 chr(166) 和 chr(167) 进行编码。
procedure TFormMain.IdTCPServer1InsertAccount(
ASender: TIdCommand);
var
cmd: String;
request: String;
Params: TMyStrings;
AccountNo, Address, UserName: String;
begin
cmd := 'InsertAccount';
request := Copy(ASender.Rawline, Length(cmd) + 2, Length(ASender.RawLine));
Params := TMyStrings.Create;
try
AssignDelimited(chr(166), request, Params);
AccountNo := Params[0];
Address := replace(char(167), #13#10, Params[1])
UserName := Params[2];
似乎这样做是为了让参数可以包含空格。同样,内容来自备忘录控件的命令将其回车换行符替换为 chr(167),因此可以在不终止命令的情况下发送备忘录内容:
// typical client code
request := edAccountNo.Text + chr(166) +
replace(#13, chr(167), replace(#10, '', memoAddress.Lines.Text) +
chr(166) + Fusername;
idTCPClient1.WriteLn('InsertAccount' + space + request);
现在,在使用 Indy 10 将此代码转换为 Delphi 10.1 时,我使用 ANSIChar(166) 进行了搜索和替换 chr(166),但我很快发现 Indy 10 不“喜欢”高于 127 的 ANSIChar . 请求在客户端看起来是正确的,但在服务器上接收到 ?'s
升级此代码的最佳方法是什么? 谢谢。
【问题讨论】: