Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FTPClient из commons-net-1.2.2, проблеммы с русскими буквами 
:(
    Опции темы
Sleepy_PIP
Дата 16.11.2004, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ситуация такова - получаю я с unix сервера все отлично, с русскими в win1251. а вот попытка сделать .changeWorkingDirectory(dir); где dir - то что мне дали as is - приводит к
550 /??? ???? (и так далее): No such file or directory.
т.е. от меня туда ползуть win1251 символы и тамошний сервер униховый их не понимает.
Битый час пытаюсь понять как хотя-б стазать terminal type - пока без результата.
Подскажите как быть?
Спасибо!

PS: нашел TerminalTypeOptionHandler. но когда его устанавливать? попробовал до и после коннекта - результат нулевой smile ... ставил VT100 ...


Это сообщение отредактировал(а) Sleepy_PIP - 16.11.2004, 21:53


--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
Sleepy_PIP
Дата 17.11.2004, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Не понимаю ...
В commons-net на контрольный стрим FTP был назначен чарсет ISO-8859-1.

в месте (FTP.java):
Код

   protected void _connectAction_() throws IOException
   {
       super._connectAction_();
       _controlInput =
           new BufferedReader(new InputStreamReader(getInputStream(),
                                                    __DEFAULT_ENCODING));
       _controlOutput =
           new BufferedWriter(new OutputStreamWriter(getOutputStream(),
                                                     __DEFAULT_ENCODING));
       __getReply();
       // If we received code 120, we have to fetch completion reply.
       if (FTPReply.isPositivePreliminary(_replyCode))
           __getReply();
   }


не работало с юниксовыми серваками по причине замены русских на ????? ... но почему-то работало с виндовыми серваками. хм.
написал пример типа
Код

     String st="йцуфывячсЙЦУФЫВЯЧС";
     FileOutputStream fo=new FileOutputStream("c:\\eee.lll");
     StringBuffer __commandBuffer = new StringBuffer();

     __commandBuffer.setLength(0);
     __commandBuffer.append(st);



     BufferedWriter _controlOutput =
         new BufferedWriter(new OutputStreamWriter(fo,"Cp1251"));
     String message;
     _controlOutput.write(message = __commandBuffer.toString());
     _controlOutput.flush();

     _controlOutput.write(st,0,18);
     _controlOutput.flush();
    fo.close();

прверил - при Cp1251 все символы пишутся корректно, при ISO-8859-1 - как раз ?????
поставил в FTP.java Cp1251 - все прекрасно, и юниксовые серваки стали понимать русский и виндовые.
НОООО! пропала напрочь буковка 'я' ... (0xff) ...
и соотв. перейти в каталог с буквой 'я' теперь не возможно ...
URLEncoding дает строчку не совместимую - применть нельзя - то пей changeWorkingDirectori не срабатывает ...
и чего теперь с этой 'я' делать????



Это сообщение отредактировал(а) Domestic Cat - 17.11.2004, 22:42


--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
Sleepy_PIP
Дата 18.11.2004, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



разобрался. зверски поправил исходники. теперь все работает. но телнет пришлось убить smile.
если кому надо - расскажу.


--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
Sun
Дата 19.11.2004, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

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



Цитата(Sleepy_PIP @ 18.11.2004, 18:59)
разобрался. зверски поправил исходники. теперь все работает. но телнет пришлось убить smile.
если кому надо - расскажу.

Обязательно рассказывай! smile Включим в FAQ.


--------------------
Account removed
PM MAIL   Вверх
Sleepy_PIP
Дата 20.11.2004, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Sun @ 19.11.2004, 11:57)
Цитата(Sleepy_PIP @ 18.11.2004, )
разобрался. зверски поправил исходники. теперь все работает. но телнет пришлось убить smile.
если кому надо - расскажу.

Обязательно рассказывай! smile Включим в FAQ.

прошу сразу делать поправку на то, что в Java я новичек. полний.

Исходное - сосканить _все_ файлисты со _всех_ типов имеющихся в лок. сети FTP сайтов.
(и ислючительно под эту задачу все и затачиватся! прошу без критики - я добился чего хотел! %) )

Итак. имеем commons-net-1.3.0-dev (точнее сказать таковой она стала из commons-net-1.2.2 после прогона ant с подкл. сеткой. т.е. с засасыванием последих вариантов доп. библиотек).
Как это собрать - отдельный разговор - есть одна тонкость.
Далее. борьба с русскими буквами.
1. тамошний FTP заточен через тамошни-ж Telnet. а как известно в телнете старшие значения байта - упр. символы (если только терминал не RAW - но в такой режим мне включиться не удалось).
2. правка FTP.java
private static final String __DEFAULT_ENCODING = "windows-1251";
3. правка FTPFileEntryParserFactory.java
заменить
Код

           }
           else if (ukey.indexOf("WINDOWS") >= 0)
           {
               return createNTFTPEntryParser();
           }

на
Код

           }
           else if (ukey.indexOf("WIN") >= 0)
           {
               return createNTFTPEntryParser();
           }

4. правка telnetinputstream.java (сразу скажу - возможно этого мало для других задач)
Код

//                if (ch == TelnetCommand.IAC)
//                {
//                    __receiveState = _STATE_IAC;
//                    continue;
//                }

5. правка telnetoutputstream.java
Код

//PIP                case TelnetCommand.IAC:
//PIP                    __client._sendByte(TelnetCommand.IAC);
//PIP                    __client._sendByte(TelnetCommand.IAC);
//PIP                    break;


Все конечно произведено как я и говорил - зверски. Телнет теперь имеет полные шансы не работать (внутр. тесты не проходят. я надеюсь интересующиеся сами уберут test из build.xml в нужном месте smile ).
Более того - при плохой связи и рассинхронизации по TCP пакетам изредка будем иметь
ERROR Exception on Connecting:org.apache.commons.net.telnet.InvalidTelnetOptionException: Already registered option: 24
но это означает только одно - Ваш ТСП пакет был проглочен сеткой навсегда, и до получателя не дошел ... а Ваш следующий пакет - дошел ...

Извините за чайниковость, но я своего добился. smile

Это сообщение отредактировал(а) Domestic Cat - 22.11.2004, 21:26


--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
Domestic Cat
Дата 22.11.2004, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Модератор: Пожалуйста, используй теги [code=jаva] [/cоde]. Неотформатированный коd тяжелее читать.


--------------------

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

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


 




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


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

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