Indy 9 не поддерживает кодировки, а также не поддерживает Delphi 2009+ для Unicode. Все в Indy 9 принимает/основывается только на AnsiString
. Строки передаются как есть, как если бы они были необработанными байтовыми массивами.
Итак, не отправляйте свои данные AnsiString
через соединение с использованием ANSI. Вы можете отправить/получить его как UTF-8. Вам просто нужно вручную закодировать/декодировать данные AnsiString
, вот и все. Indy 9 отправит кодированный UTF-8 AnsiString
как есть, и прочитает кодировку UTF-8 AnsiString
как есть. Затем вы можете кодировать/декодировать данные AnsiString
в/из UTF-8 по мере необходимости в вашем окружном коде.
Например, клиент Indy 9 может это сделать:
IdTCPClient1.WriteLn(UTF8Encode('Some Unicode String Here'));
...
S := UTF8Decode(IdTCPClient1.ReadLn);
Затем сервер Indy 10 может это сделать:
AContext.Connection.IOHandler.DefStringEncoding := TIdTextEncoding.UTF8;
...
S := AContext.Connection.IOHandler.ReadLn;
...
AContext.Connection.IOHandler.WriteLn(...);
Спасибо Реми, это то, что мне было нужно –