Это следующий вопрос к моему предыдущему вопросу here.Обновление Delphi 7 Indy 9 app to Indy 10 (II)
Многие команды и ответы кодируются как строки с разделителями. В 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);
Теперь в преобразовании этого кода в Delphi 10.1 с Indy 10, я выполнил поиск и замену chr (166) с помощью ANSIChar (166), но вскоре обнаружил, что Indy 10 не «нравится» ANSIChars выше, чем 127. Запрос выглядит правильно на клиенте, но получен в сервер с? 's
Какой лучший подход к обновлению этого кода? Спасибо.
Благодарим за предоставление полного ответа на мои вопросы. – nolaspeaker