Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Python: особенности работы с ftplib  (Прочитано 12568 раз)
0 Пользователей и 1 Гость смотрят эту тему.
0xfadec0de
Интересующийся

ru
Offline Offline

« : 01-11-2009 12:37 » 

Всем доброго времени суток.  Так как не нашел отдельного раздела по Python'у, решил написать сюда (хотя, может, плохо искал?)

У меня возникла необходимость получить список директорий на определенном ftp сервере, и в общем случае проблем с этим нет, нижеприведенный кусочек кода это делает

Код:

from ftplib import FTP

filmsdir  = '/pub/video/films'

ftp = FTP('172.16.8.22')
ftp.login()
ftp.cwd(filmsdir)
ftp.retrlines('LIST')

ftp.quit()

Но если у нас названия директорий на великом и могучем, то я получаю вот это (кодировку  имен файлов на ftp я так и не определил)

Код:
drwxr-xr-x   87 ftp      ftp          4096 Oct 30 13:25 Äðàìû
drwxr-xr-x   30 ftp      ftp          4096 Oct 23 21:01 Èñòîðè÷åñêèå
drwxr-xr-x  240 ftp      ftp          4096 Oct 31 18:41 Êîìåäèè
drwxr-xr-x   49 ftp      ftp          4096 Oct 23 20:02 Ìåëîäðàìû
drwxr-xr-x   17 ftp      ftp          4096 Apr 10  2009 Ìèñòèêà
drwxr-xr-x   27 ftp      ftp          4096 Oct 28 23:25 Ïðèêëþ÷åíèÿ
drwxr-xr-x   69 ftp      ftp          4096 Oct 23 20:53 Ðóññêîå êèíî
drwxr-xr-x  194 ftp      ftp          4096 Oct 29 22:55 Ñåðèàëû
drwxr-xr-x    6 ftp      ftp          4096 Sep 16  2007 Ñòàðûå ôèëüìû
drwxr-xr-x   65 ftp      ftp          4096 Jul 20 08:39 Òðèëëåð_Äåòåêòèâû
drwxr-xr-x  108 ftp      ftp          4096 Oct 31 18:52 Óæàñû



Подскажите, как справиться с кодировкой или куда дальше копать?
« Последнее редактирование: 01-11-2009 16:10 от Sel » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 01-11-2009 14:56 » new

Цитата: 0xfadec0de
но если у нас названия директорий на великом и могучем то я получаю вот это
А где получаешь? На экране? Так преобразуй в нужную кодировку перед выводом на экран.

Я вот вижу, что в Python есть разница между типами str и unicode. Соответственно, если ты получаешь последовательность str, то там находятся правильные символы в кодировке некоторой кодовой страницы. Поэтому затем ещё нужно явно определить, с какой кодовой страницей ты имеешь дело.

У строчки str есть методы encode и decode, есть класс Codec - всё это в частности служит для преобразования кодировок.

Но никто тебе не скажет, в какой кодировке хранятся имена на FTP-сервере. В принципе, это зависит от клиентов FTP-сервера, и одновременно на сервере могут присутствовать названия файлов в CP1251 и KOI8-R и т.д.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
0xfadec0de
Интересующийся

ru
Offline Offline

« Ответ #2 : 06-11-2009 09:06 » 

Dimka,  Я писал этот кусочек в питоне 3.1 , там теперь все строки  юникод.
Спасиба буду копать.
Записан
.
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 29-10-2010 20:07 » 

Несмотря на юникодность строк, нужно напрямую задавать кодировки, поскольку протокол ftp сам по себе - однобайтовый (в те времена не было даже такого слова).

Если ты выводишь на экран, то необходимо помнить про кодировку консоли: в Windows программа работает в одной кодировке, а отображение идет в другой (правда весело?)

Если "гадать по значкам", то скорее всего там KOI8-R
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines