Форум сайта python.su
Здравствуйте!
Хожу по ftp при помощи ftplib, получаю список файлов ftp.retrlines('LIST'), но имена некоторых файлов отображаются крякозябрами, подскажите как правильно перекодировать имена в utf8 для записи в БД ?!
Пробовал вот так:
def decodePath(str):
try:
return str.decode('cp1251').encode('utf8')
except:
return str
Отредактировано (Дек. 3, 2010 13:18:55)
Офлайн
мб. там ещё какието кодировки…
Отредактировано (Дек. 3, 2010 23:10:29)
Офлайн
я с подобной проблемой сталкивался в третьем питоне и в 2.7 с unicode_literals, решилось так:
ftp = ftplib.FTP(...)
ftp.__class__.encoding = sys.getfilesystemencoding()
Офлайн
pyuser спасибо огромное, помогло !
Отредактировано (Дек. 4, 2010 15:21:35)
Офлайн
pyuser
Правда без этой функции не работает:
def decodePath(str):
try:
return str.decode('cp1251').encode('utf8')
except:
return str
Офлайн
у меня была совсем другая задача, поэтому меня вполне устраивало то, что кодировка совпадает с кодировкой файловой системы :)
а Вашу функцию я бы написал так:
def decodePath(path):
if isinstance(path, str):
path = path.decode(sys.getfilesystemencoding())
return path.encode("utf-8")
Офлайн
pyuser
Ваша функция не работает =(
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 21-22: invalid data
Офлайн
какая версия питона? на какую строку ругается?
Офлайн
Версия: 2.5.2-3
Строка:
path = path.decode(sys.getfilesystemencoding())
Офлайн
А ось какая? А вместо path = path.decode(sys.getfilesystemencoding()) пробовали path = path.decode(“cp1251”)?
Офлайн