Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как Получить текст по TCP (Indy) в нужной кодировке?


rareMax

Вопрос

Добрый день! Возник еще один вопрос по работе с FM3. Нашел на диске заброшенный проект(клиент для чата). Захотелось переписать его под Android. Только проблема заключается вот в чем. При получении текста я раньше писал так:

fInput:= fClient.Socket.ReadLn(TEncoding.UTF8);

Но сейчас видимо что-то изменилось в ИнДи(из-за кроссплатформености полагаю?), и TEncoding.UTF8 нельзя использовать. А без него в неправильной кодировке приходит текст. Кто может, приведите пример, как получить текст с сервера с преобразованием кодировки?

 

P.S. Ярослав, если я не в том разделе создал тему, просьба переместить ее.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Администраторы

Добрый день,

 

Теперь он в качестве параметра принимает объект другого класса, а именно интерфейса IIdTextEncoding, который описывает основные методы по работе с потоком.

 

Естественно, что этот интерфейс вам не нужно реализовывать, а нужно найти его реализацию для UTF8 кодировки. 

 

Собственно смотрим в IdGlobal.pas и видим там глобальные процедуры по получению нужных реализаций в требуемых кодировках:

  IdTextEncodingType = (encIndyDefault, encOSDefault, enc8Bit, encASCII, encUTF16BE, encUTF16LE, encUTF7, encUTF8);

  function IndyTextEncoding(AType: IdTextEncodingType): IIdTextEncoding; overload;
  function IndyTextEncoding(ACodepage: Word): IIdTextEncoding; overload;
  function IndyTextEncoding(const ACharSet: String): IIdTextEncoding; overload;
  {$IFDEF DOTNET}
  function IndyTextEncoding(AEncoding: System.Text.Encoding): IIdTextEncoding; overload;
  {$ENDIF}
  {$IFDEF HAS_TEncoding}
  function IndyTextEncoding(AEncoding: TEncoding): IIdTextEncoding; overload;
  {$ENDIF}

  function IndyTextEncoding_Default: IIdTextEncoding;
  function IndyTextEncoding_OSDefault: IIdTextEncoding;
  function IndyTextEncoding_8Bit: IIdTextEncoding;
  function IndyTextEncoding_ASCII: IIdTextEncoding;
  function IndyTextEncoding_UTF16BE: IIdTextEncoding;
  function IndyTextEncoding_UTF16LE: IIdTextEncoding;
  function IndyTextEncoding_UTF7: IIdTextEncoding;
  function IndyTextEncoding_UTF8: IIdTextEncoding;

Тут либо используем конкретный метод  IndyTextEncoding_UTF8, либо же используем вариант через:

IndyTextEncoding(IdTextEncodingType.encUTF8)
Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...