Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ftplib передача utf8 имени 
V
    Опции темы
Tsukasa
  Дата 16.7.2010, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


скучающий мозгоблуд



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 3.2.2009

Репутация: нет
Всего: нет



Здраствуйте. Вопрос к опытным пользователям
требуется передать файлы по 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()


Это сообщение отредактировал(а) Tsukasa - 16.7.2010, 16:10
PM MAIL ICQ   Вверх
Tsukasa
  Дата 18.7.2010, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


скучающий мозгоблуд



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 3.2.2009

Репутация: нет
Всего: нет



Решение нашел сам хотя и странное и почему так - не понимаю.


Код

_code1_ = 'cp1251'

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

_code1_ = 'utf8'


причина непонимания - мы вроде как должны декодировать до уникода а потом уже кодировать в нужную таблицу символов =/
но тут каким то непостежимым образом получается так, что мы декодируем из utf8  в latin-1 хотя под вендой у нас cp1251 =\ .........
Линукс теперь нормально видит имена файлов - правда при доступе через ftp получаются кракозябры итог пишу второй клиент для копирования обратно в нужную таблицу.

Это сообщение отредактировал(а) Tsukasa - 18.7.2010, 12:06
PM MAIL ICQ   Вверх
_Viper_
Дата 19.7.2010, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 8.11.2006

Репутация: 10
Всего: 11



В третем питоне все строки юникодные и поэтому отдельно декодировать до юникода не нужно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0629 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.