[ftp]определить кодировку

Andbar

Листал RFC-959, не нашел там никакого указания на возможность узнать кодировку, используемую на сервере. Может невнимательно читал.
Как её определяют?

Ivan8209

> Листал RFC-959
Мне кажется, что это слишком древний RFC, попозже ничего не издавалось?
> Как её определяют?
Никак?
---
...Я работаю антинаучным аферистом...

qsk78

Там же вроде 7-битовая кодировка используется
Надо либо использовать какую-нибудь библиотеку, которая занимается автоопределением кодировок, либо указывать используемую кодировку вручную.

ppplva

На практике, конечно, 8бит, иначе вопроса бы не возникло )
lftp позволяет в конфиге указывать кодировку для определенных серверов.
Про автоматическое определение не слышал.

tokuchu

Да, по моему, в ftp такая фича не предусмотрена. Там ещё много других проблем с именами файлов.

ppplva

какую-нибудь библиотеку, которая занимается автоопределением кодировок

Эта штука скорее всего будет плохо работать, там почти нет осмысленного текста, и файлов в не-ascii может быть совсем мало

ppplva

Можно попробовать догадываться по ОС.

Ivan8209

> Можно попробовать догадываться по ОС.
И много ты узнаешь, если вдруг обнаружишь линух или фрю?
---
...Я работаю антинаучным аферистом...

Dasar

> Про автоматическое определение не слышал.
как минимум есть RFC 2640

Andbar

Можно попробовать догадываться по ОС.
На сколько я понимаю, стандартным путём определения ОС является команда SYST?
D:\Chisa\telnet mahoro-san 21
220-Welcome! Friday, the 8th of September 2006, uptime: 01d05:50:44
220 Gene6 FTP Server v3.5.0 (Build 10) on AMD Athlon(tm) XP 3200+ with 1023,453 MBytes RAM ready...
syst
530 Please login with USER and PASS first.
user Anonymous
331 Password required for Anonymous.
pass radist
230-Disk Quota - Current : 18,463 MBytes - Max : 512 MBytes - Available : 493,537 MBytes
230 Hi, Anonymous. You've just successfully logged in.
syst
215 UNIX Type: L8
quit
221-You have used 0.015 seconds of server's CPU time.
221 Goodbye.


Connection to host lost.

D:\Chisa>telnet kai.local 21
220 (vsFTPd 2.0.5)
user Anonymous
331 Please specify the password.
pass radist
230 Login successful.
syst
215 UNIX Type: L8
quit
221 Goodbye.


Connection to host lost.

D:\Chisa>

vall

Эта штука скорее всего будет плохо работать, там почти нет осмысленного текста, и файлов в не-ascii может быть совсем мало
ну enca так-то очень хорошо работает.
небезызвестное русское слово из трёх букв угадывает на любой кодировке

Andbar

Это интересно. Однако, боюсь, в том случае, когда прога должна подключиться к серваку, быстренько прошарить по всем папочкам, использование подобной либы будет затруднительно, т.к. файл с символами с кодами >127 может появиться не сразу, в результате чего придется применять либу каждый раз, что, я так подозреваю, дольше, чем просто конвертировать из utf-8 имена файлов только тогда, когда это действительно понадобится.
Кроме того, для лазания по фтп-папкам, это позволит обойти проблему с именами из вопросительных знаков.
Короче, спасибо за информацию, я понял, что надо по возможности работать в utf8.

vall

хз, у тебя я думаю не возникнет проблем с размером базы из-за utf8. так-то cp1251 должно хватить.
хотя иероглифы я думаю будут там вполне актуальны =)
да и определять кодировку ресурса нужно только один раз, и ещё лучше просто задать руками.
можно начать определение когда появятся сиволы >127 те что меньше можно считать уже в utf8.
ну а вобще-то нужно снять дамп с русурса а уже потом его анализировать и всовывать в базу большим куском - так быстрее будет.

Andbar

хз, у тебя я думаю не возникнет проблем с размером базы из-за utf8
Этот вопрос не ко мне, по идее. А поиск по utf8 не дольше работает разве?
Что касается определения по символам с кодом больше 127, это не удобно, кроме того всё-равно будут проблемы с серваками, которые не поддерживают "opts utf8 on".
Короче, проще попытаться установить кодировку сразу после коннекта. Если не получается, то считать, что win1251 (для тех серваков, для которых это не правильно, использовать WinInet, который неоптимально работает, зато "всеяден")

vall

кроме того всё-равно будут проблемы с серваками, которые не поддерживают "opts utf8 on".
а кто такое поддерживает?

Andbar

а кто такое поддерживает?
любой сервак, у которого в списке, возвращаемом в ответ на команду FEAT есть слово UTF8
Правда, как показал опыт, перед этой командой надо отправить команду CLNT (не разбирался, это по стандарту или это нововведение виндовых фтп-серваков, тем более что я не знаю доступных в сетке не-виндовых фтп-серваков, которые поддерживают UTF8, уже не говоря про CLNT)
 rfc2640
Кстати, может мне кто-то обяснит следующую вещь?
Команда LANG вроде позволяет установить язык. Можно ли с помощью неё задать кодировку. в которой будут возвращаться имена файлов? (напрмер, сказать серверу, что он должен передавать имена файлов в win1251)

tokuchu

Кстати, может мне кто-то обяснит следующую вещь?
Команда LANG вроде позволяет установить язык. Можно ли с помощью неё задать кодировку. в которой будут возвращаться имена файлов? (напрмер, сказать серверу, что он должен передавать имена файлов в win1251)
В rfc про эту команду говорится, что с помощью неё можно менять язык, на котором будут выводиться сообщения типа "230 Login successful". К кодировке имён файлов это отношения не имеет.
Оставить комментарий
Имя или ник:
Комментарий: