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

Чтение строки TIdTCPClient.IOHandler.ReadLn в разных языковых пакетах


Alexandr Suvorov

Вопрос

Доброго времени суток. 

Борюсь с проблемой пару тройку дней, перерыл все что можно и зашел в тупик.

Ситуация в следующем:

Сервер (крутится на линуксе) отправляет строки в формате:

   заголовок 2 байта, текст, конец строки 2 байта

   255 85 text1 255 170   255 85 text2 255 170 ...

Клиентская программа работает на iPad (iOS=14.7.1), с помощью компонента TIdTCPClient принимаю строки:

s:string;

s:=indy_OnLine.IOHandler.ReadLn(#255#170,IndyTextEncoding_OSDefault);

Все отлично работает, пока в настройках iPad установлен язык системы Русский

Как только меняем язык системы на English (или любой другой), прем данных полностью прекращается.   IOHandler.ReadLn  - ничего не может принять, или не может считать, полная тишина.

Я перепробовал все возможные кодировки текста:

  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;

не помогло, функция ReadLN не может принять данные, или тупо ничего не видит.

Подскажите пожалуйста в какую сторону капать?

Возможно это связано с языковым пакетом, но только как это связано?

 

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

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

  • 0
3 часа назад, slav_z сказал:

1424297831_.png.c496cf0b5016b2a80d1224a3752730a2.png

Спасибо за совет, по пробую с этой функцией.

Я не правильно изложил суть проблемы.

Строка от сервера ложится во входной буфер TIdTCPClient (например): 255_85_text1_255_170_255_85_text2_255_170_255_85_text3_255_170

С помощью функции: TIdTCPClient.IOHandler.Readln

s:=indy_OnLine.IOHandler.ReadLn(#255#170,IndyTextEncoding_OSDefault);

 получаю три строки, удаляю первые два символа:

    text1

    text2

    text3

Если переключить язык системы iOS iPad  на Английский, то функция TIdTCPClient.IOHandler.Readln - не может с буфера считать строки. В ответ возвращает пустую строку, а в буфере так и остаются данные.

Вопрос: почему так происходит и как изъять строки? 

 

Изменено пользователем Alexandr Suvorov
Ссылка на комментарий
  • 0

я вам пытался сказать что TIdTCPClient.IOHandler.Readln скорее всего просто не может найти ваш терминатор #255#170 в полученных данных (и вернуть результат)...  там, возможно, совсем другие байты... попробуйте получить данные не функцией Readln а прочитать именно байты из сокета... и посмотреть что там пришло...

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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...