Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кодировка indy 10 и telnet 
:(
    Опции темы
Ergoz
Дата 12.7.2009, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 3.6.2009
Где: Россия

Репутация: нет
Всего: нет



Здравствуйте, ув. форумчане. Опять я беспокою пользователей своими, возможно, глупыми вопросами, но всё же. 

Я пишу приложение, с возможностью управления им через телнет. Для этого я использовал инди 10 (так нужно и отказаться от него нет возможности). И такая проблема что во-первых когда я в терминали винды (да и вообще) пишется по 2 знака, т.е. если ввожу ? то отображается как ??. Это осложняет мою жизнь и очень сильно, но это не главная проблема, главная проблема описана ниже:
Проблема с кодировкой, которая передаётся клиенту (т.е. терминалу телнета). У меня в проекте используется несколько конструкций (я пытался так решить проблему, но не прокатили:
     
Вариант первый (с кодированными значениями):
Код

AThread.Connection.IOHandler.WriteLn('Help System.'+#230+#237+#251+#233+#242+#229+#225+#229+#241+#239+#232+#241+#238+#234);


Вариант второй, попытка преобразовать в анси (слышал что так надо сделать чтоб работало, но не прокатило):
Код

AThread.Connection.IOHandler.WriteLn(ansistring('Краткая справка по командам Telnet интерфейса'+#13+' ?, help - get help'+#13+' exit, logout - logout and exit from server'+#13+' halt - slow program closing'+#13+' ver - get program version'+#13+' msg <msg> - вывод сообщения для пользователя  inp <собщение> - вывод сообщения для пользователя и возврат его ответа'));


Вариант третий (в ютф-8 преобразовывал строку, но она так же как и анси послала куда подальше):
Код

AThread.Connection.IOHandler.WriteLn(utf8string('Краткая справка по командам Telnet интерфейса'+#13+' ?, help - get help'+#13+' exit, logout - logout and exit from server'+#13+' halt - slow program closing'+#13+' ver - get program version'+#13+' msg <msg> - вывод сообщения для пользователя  inp <собщение> - вывод сообщения для пользователя и возврат его ответа'));


Вариант четвёртый (без преобразований и прочего шлака):
Код

AThread.Connection.IOHandler.WriteLn(Краткая справка по командам Telnet интерфейса'+#13+' ?, help - get help'+#13+' exit, logout - logout and exit from server'+#13+' halt - slow program closing'+#13+' ver - get program version'+#13+' msg <msg> - вывод сообщения для пользователя  inp <собщение> - вывод сообщения для пользователя и возврат его ответа');



Причём результат вывода данного сообщения получается такой (приведён полный лог, я думаю не составит труда найти команду "?" и все три варианта не стал в логе приводить, так как они не отличаются друг от друга):

Код

Username: aaddmmiinn

Password:


Welcome to ErgoZ Telnet Server.
You can get help. Enter "help"
or "?" to get available commands.
telnet>
??

Help System.
 msg <msg> - т√тюф ёююс∙хэшфыяюы№чютрЄхы inp <ёюс∙хэшх> - т√тюф ёююс∙хэшфыяюы№чю
 тючтЁрЄ хую юЄтхЄр
telnet>


Т.е. как можно заметить большая часть информации потерялась, например:
Код

Краткая справка по командам Telnet интерфейса'+#13+' ?, help - get help'+#13+' exit, logout - logout and exit from server'+#13+' halt - slow program closing'+#13+' ver - get program version'+#13+

Вот эта часть у нас получаеся выпадает. При любом раскладе.

Не могу никак понять в чём вообще дело, в документации такой инфы я не нашёл, в гугле тоже тихо, иначе бы не писал эту тему.
Надеюсь кто нибудь кроме меня в 10 инде работает??? Просто сколько смотрю все на 9 сидят и не спешат на 10 переходить... 

Это сообщение отредактировал(а) Ergoz - 13.7.2009, 09:26
PM MAIL ICQ   Вверх
Ergoz
Дата 13.7.2009, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 3.6.2009
Где: Россия

Репутация: нет
Всего: нет



И так, половины проблемы решилось, вроде начало и на русском отвечать командную строку, и всё благодаря этой ужасной конструкции:

Типа конвертера кода
Код

procedure oemconvert(const s: string);
begin
setlength(newstr, length(s));
chartooem(pchar(s), pchar(newstr));
end;


А это уже тупо вывод ОДНОЙ строки такой конструкцией:
Код

newstr:='Тестирование русского текста';
oemconvert(newstr);
AThread.Connection.IOHandler.WriteLn(newstr);


Но всё же есть проблема с двойными символами, очень уж напрягает, а документации по этому поводу нет, видел на зарубежном форуме такую же проблему, но так там никто и не отписал.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0399 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.