Кодировка текста TCP-клиента Indy 9

У меня есть приложение Delphi 7, использующее Indy 9, которое подключает TIdTCPClient к TIdTCPServer в приложении Delphi XE2 с использованием Indy 10.5.

Чтобы установить кодировку текста в UTF-8 в TIdTCPClient в Indy 10 я могу использовать это:

TCPClient.IOHandler.DefStringEncoding := TIdTextEncoding.UTF8;

Как я могу установить кодировку текста в UTF-8 в Indy 9, так как нет DefStringEncoding недвижимость в IOHandler?

2 ответа

Решение

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(...);

Я не нашел способа установить кодировку UTF8 в Indy 9, затем решил следующее: зная, что кодировка по умолчанию в Indy 9 TCPClient является ANSI, я настроил кодировку в ANSI в приложении TCPServer, преобразовал все строки UTF8 в ANSI до соединения с TCPserver на TCPClient и все решено.

Другие вопросы по тегам