ftplib передача utf8 имени

 
0
 
Python
ava
Tsukasa | 16.07.2010, 17:04
Здраствуйте. Вопрос к опытным пользователям
требуется передать файлы по ftp на linux сервер
передача осуществляется - файлы копируются но проблема в кодировке при передаче русскоязыных файлов

после копирования из linux системы невозможно просмотреть файлы или их обработать скриптом из питона
вот вопрос как можно передать на ftp, utf-8 имена файлов если ftplib просит представить их как LATIN-1

моя реализация передачи файлов на ftp

_code1_ = 'cp1251'
_code2_ = 'latin-1'

from ftplib import FTP
import os
from time import sleep

def transform_to(name,A ,B):
s_uni = name.encode(A)
itog = s_uni.decode(B)
return itog




def ftp_upload(handle, name, destination, node):
if os.path.isdir(name):
for x in os.listdir(name):
if os.path.isdir(os.path.join(name,x)):
print(node +" ++ создание "+ x)
handle.sendcmd("MKD "+ transform_to(x,_code1_,_code2_))
print(node +" >> переход в "+ x)
handle.sendcmd("CWD "+transform_to(x,_code1_,_code2_))
ftp_upload(handle, os.path.join(name,x), x, node+"**")
print(node +" << переход ")
handle.sendcmd("CWD ..")
else: ftp_upload(handle, os.path.join(name,x), x,node+"**")

else:
# print(node+" --> копирование "+ name)
print(node+" !-> копирование "+ destination)
try: handle.storbinary("STOR " + transform_to(destination,_code1_,_code2_), open(name, "rb"), 1024)
except:
handle.close()
print(node +" !! ОШИБКА ")



ftp = FTP("192.168.0.11")
ftp.login("user", "1")
ftp.sendcmd("OPTS UTF8 ON")

ftp.sendcmd("CWD bases")

ftp_upload(ftp, _root_dir__, "", "")

ftp.close()
ftp.quit()
Kommentare (2)
ava
Tsukasa | 18.07.2010, 12:06 #
Решение нашел сам хотя и странное и почему так - не понимаю.



_code1_ = 'cp1251'

было заменено на

_code1_ = 'utf8'


причина непонимания - мы вроде как должны декодировать до уникода а потом уже кодировать в нужную таблицу символов =/
но тут каким то непостежимым образом получается так, что мы декодируем из utf8 в latin-1 хотя под вендой у нас cp1251 =\ .........
Линукс теперь нормально видит имена файлов - правда при доступе через ftp получаются кракозябры итог пишу второй клиент для копирования обратно в нужную таблицу.
ava
_Viper_ | 19.07.2010, 14:22 #
В третем питоне все строки юникодные и поэтому отдельно декодировать до юникода не нужно.
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden