這是對我之前的問題here的後續問題。將Delphi 7 Indy 9應用程序升級到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,我用ANSIChar(166)做了一個搜索替換chr(166),但是我很快發現Indy 10不喜歡高於127的ANSIChars。請求在客戶端顯示正確,但是在帶有?的服務器
什麼是升級此代碼的最佳方法? 謝謝。
感謝您始終提供我的問題的完整答案。 – nolaspeaker