Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 3, 2010 10:14:04

andreiru
От:
Зарегистрирован: 2010-11-06
Сообщения: 154
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка ftplib

Здравствуйте!

Хожу по ftp при помощи ftplib, получаю список файлов ftp.retrlines('LIST'), но имена некоторых файлов отображаются крякозябрами, подскажите как правильно перекодировать имена в utf8 для записи в БД ?!

Пробовал вот так:

def decodePath(str):
try:
return str.decode('cp1251').encode('utf8')
except:
return str
Работает но всё равно некоторые имена в кракозябрах



Отредактировано (Дек. 3, 2010 13:18:55)

Офлайн

#2 Дек. 3, 2010 23:10:06

mr.pihto
От:
Зарегистрирован: 2010-08-29
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка ftplib

мб. там ещё какието кодировки…



Отредактировано (Дек. 3, 2010 23:10:29)

Офлайн

#3 Дек. 4, 2010 03:05:02

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Кодировка ftplib

я с подобной проблемой сталкивался в третьем питоне и в 2.7 с unicode_literals, решилось так:

ftp = ftplib.FTP(...)
ftp.__class__.encoding = sys.getfilesystemencoding()
попробуйте, возможно и Вам поможет



Офлайн

#4 Дек. 4, 2010 15:21:21

andreiru
От:
Зарегистрирован: 2010-11-06
Сообщения: 154
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка ftplib

pyuser спасибо огромное, помогло !



Отредактировано (Дек. 4, 2010 15:21:35)

Офлайн

#5 Дек. 5, 2010 07:55:13

andreiru
От:
Зарегистрирован: 2010-11-06
Сообщения: 154
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка ftplib

pyuser
Правда без этой функции не работает:

def decodePath(str):
try:
return str.decode('cp1251').encode('utf8')
except:
return str
Вы в своем варианте использовали что то подобное этой функции ?



Офлайн

#6 Дек. 6, 2010 04:35:45

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Кодировка ftplib

у меня была совсем другая задача, поэтому меня вполне устраивало то, что кодировка совпадает с кодировкой файловой системы :)
а Вашу функцию я бы написал так:

def decodePath(path):
if isinstance(path, str):
path = path.decode(sys.getfilesystemencoding())
return path.encode("utf-8")



Офлайн

#7 Дек. 6, 2010 05:31:19

andreiru
От:
Зарегистрирован: 2010-11-06
Сообщения: 154
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка ftplib

pyuser
Ваша функция не работает =(

UnicodeDecodeError: 'utf8' codec can't decode bytes in position 21-22: invalid data



Офлайн

#8 Дек. 7, 2010 02:31:35

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Кодировка ftplib

какая версия питона? на какую строку ругается?



Офлайн

#9 Дек. 7, 2010 15:09:28

andreiru
От:
Зарегистрирован: 2010-11-06
Сообщения: 154
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка ftplib

Версия: 2.5.2-3
Строка:

path = path.decode(sys.getfilesystemencoding())



Офлайн

#10 Дек. 8, 2010 02:23:49

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Кодировка ftplib

А ось какая? А вместо path = path.decode(sys.getfilesystemencoding()) пробовали path = path.decode(“cp1251”)?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version