Найти - Пользователи
Полная версия: Ошибка кодировки при загрузке файла через FTP
Начало » Python для новичков » Ошибка кодировки при загрузке файла через FTP
1
The_Immortal
Пытаюсь загрузить файл на 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()
Как победить указанную ошибку?

Спасибо!
Ser5+
Файл на локалке,то есть на диске? Ехель не пробовал грузить на фтп,только текстовики с папками.
The_Immortal
Ser5+, файл на шаре, но не в этом дело. И также проблема не в его расширении, а то, что в пути к этому файлу содержится кириллица.
py.user.next
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'
>>>

А вообще, избавься для начала от кириллицы, сделай всё на латинице. Когда будет работать программа, тогда и кириллицу добавишь.
The_Immortal
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'
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB