Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 16, 2020 15:49:27

The_Immortal
Зарегистрирован: 2020-09-08
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка кодировки при загрузке файла через FTP

Пытаюсь загрузить файл на ftp-сервер с каталога, в которому содержится кириллица:

 from ftplib import FTP
file = '\\\\server.domain\\for_all\\НА САЙТ\\file1.xlsx'
           
ftp = FTP('ftp.ru')
ftp.login()
with open(file, 'rb') as fobj:
    ftp.storbinary('STOR ' + file, fobj, 1024) #UnicodeEncodeError: 'latin-1' codec can't encode characters in position 29-30: ordinal not in range(256)
ftp.quit()
Как победить указанную ошибку?

Спасибо!

Отредактировано The_Immortal (Сен. 16, 2020 15:50:29)

Офлайн

#2 Сен. 16, 2020 15:59:53

Ser5+
Зарегистрирован: 2019-11-18
Сообщения: 68
Репутация: +  1  -
Профиль   Отправить e-mail  

Ошибка кодировки при загрузке файла через FTP

Файл на локалке,то есть на диске? Ехель не пробовал грузить на фтп,только текстовики с папками.

Офлайн

#3 Сен. 16, 2020 16:28:05

The_Immortal
Зарегистрирован: 2020-09-08
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка кодировки при загрузке файла через FTP

Ser5+, файл на шаре, но не в этом дело. И также проблема не в его расширении, а то, что в пути к этому файлу содержится кириллица.

Отредактировано The_Immortal (Сен. 16, 2020 16:28:55)

Офлайн

#4 Сен. 16, 2020 23:20:10

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Ошибка кодировки при загрузке файла через FTP

The_Immortal
Как победить указанную ошибку?
Попробуй в utf-8 перекодировать.
  
fpath = r'\\server.domain\for_all\НА САЙТ\file1.xlsx'.encode('utf-8')

  
>>> fpath = r'\\server.domain\for_all\НА САЙТ\file1.xlsx'.encode('utf-8')
>>> fpath
b'\\\\server.domain\\for_all\\\xd0\x9d\xd0\x90 \xd0\xa1\xd0\x90\xd0\x99\xd0\xa2\\file1.xlsx'
>>> 
>>> fpath = r'\\server.domain\for_all\НА САЙТ\file1.xlsx'.encode('utf-8').decode('latin1')
>>> fpath
'\\\\server.domain\\for_all\\Ð\x9dÐ\x90 СÐ\x90Ð\x99Т\\file1.xlsx'
>>>
>>>

Тут вариант с cp1251 (кодировка Windows)
 >>> fpath = r'\\server.domain\for_all\НА САЙТ\file1.xlsx'.encode('cp1251')
>>> fpath
b'\\\\server.domain\\for_all\\\xcd\xc0 \xd1\xc0\xc9\xd2\\file1.xlsx'
>>> 
>>> fpath = r'\\server.domain\for_all\НА САЙТ\file1.xlsx'.encode('cp1251').decode('latin1')
>>> fpath
'\\\\server.domain\\for_all\\ÍÀ ÑÀÉÒ\\file1.xlsx'
>>>

А вообще, избавься для начала от кириллицы, сделай всё на латинице. Когда будет работать программа, тогда и кириллицу добавишь.



Отредактировано py.user.next (Сен. 16, 2020 23:27:27)

Офлайн

#5 Сен. 17, 2020 02:19:39

The_Immortal
Зарегистрирован: 2020-09-08
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка кодировки при загрузке файла через FTP

py.user.next,

py.user.next
избавься для начала от кириллицы, сделай всё на латинице. Когда будет работать программа, тогда и кириллицу добавишь
А я так и сделал изначально - без кириллицы проблем никаких нет, но в итоге нужно побороть кириллицу.

Ну в общем, пока решений не вижу - Вы и сами это показали:
 from ftplib import FTP
file = '\\\\server.domain\\for_all\\НА САЙТ\\file1.xlsx'.encode('utf-8')
           
ftp = FTP('ftp.ru')
ftp.login()
with open(file, 'rb') as fobj:
    ftp.storbinary('STOR ' + file, fobj, 1024) # TypeError: can only concatenate str (not "bytes") to str
 file = '\\\\server.domain\\for_all\\НА САЙТ\\file1.xlsx'.encode('utf-8').decode('latin1')
with open(file, 'rb') as fobj:
    ftp.storbinary('STOR ' + file, fobj, 1024) # FileNotFoundError: [Errno 2] No such file or directory: '\\\\server.domain\\for_all\\Ð\x9dÐ\x90 СÐ\x90Ð\x99Т\\file1.xlsx'
 file = '\\\\server.domain\\for_all\\НА САЙТ\\file1.xlsx'.encode('utf-8').decode('cp1251')
with open(file, 'rb') as fobj:
    ftp.storbinary('STOR ' + file, fobj, 1024) # FileNotFoundError: [Errno 2] No such file or directory: '\\\\server.domain\\for_all\\НА САЙТ\\file1.xlsx'
 file = '\\\\server.domain\\for_all\\НА САЙТ\\file1.xlsx'.encode('cp1251').decode('latin1')
with open(file, 'rb') as fobj:
    ftp.storbinary('STOR ' + file, fobj, 1024) # FileNotFoundError: [Errno 2] No such file or directory: '\\\\server.domain\\for_all\\ÍÀ ÑÀÉÒ\\file1.xlsx'
А в чем сама проблема?
 ftp.storbinary
принимает только latin-1 кодировку?

—–
UPD: тьфу, оказывается всё просто:
 ftp.encoding = 'utf-8'

Отредактировано The_Immortal (Сен. 17, 2020 02:31:20)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version