Hello,

J'essaye d'écrire un script pour copier/mirrorer un répertoire local sur un site FTP distant avec la librairie standard ftplib en python 3.2.
Ca marche bien, sauf les accents !
J'ai déjà copié une partie avec Filezilla, où le serveur est configuré en UTF8. Mais je n'arrive pas à traiter les fichiers ou les répertoires avec des accents, l'encodage ne semble pas le même.

Mon script :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
# -*- coding:utf-8 -*-
from ftplib import FTP
import sys
 
USER = 'user'
PASS = 'pwd'
SERVER = 'server.dns.com'
PORT = 21
 
print("connection")
ftp = FTP()
ftp.connect(SERVER, PORT)
ftp.login(USER, PASS)
print("etat", ftp.getwelcome())
ftp.set_pasv(True)
 
ftp.sendcmd("OPTS UTF8 ON")  # pour passer en UTF8 comme dans Filezilla
 
ftp.cwd('/test')
#le répertoire /test distant contient uniquement un fichier tést.txt
 
print("test création répertoire avec accents")
ftp.mkd("aéo1")
ftp.sendcmd("MKD aéo2")         # autre méthode ...
 
print("test récupération des éléments du répertoire")
x=ftp.nlst()
print(x)
# ['.', '..', 'aéo1', 'aéo2', 'tést.txt']
 
# résultats sous filezilla :
# en forçant l'UTF8, on a aéo1  aéo2 tést.txt mais impossible de rentrer / modifier les répertoires aéo1 et aéo2.
# sinon avec le jeu de caractères local : aéo1 aéo2 et tést.txt
 
# test avec encodage UTF8 ... enfin je crois j'ai vu ça quelquepart ...
cmd="MKD aéo3"
ftp.sendcmd(cmd.encode('utf-8'))
# erreur TypeError: can't concat bytes to str
 
ftp.quit()
Là je suiis perdu
Il me semblait qu'en v3 python les chaînes de caractères étaient par défaut codées en UTF8 ...

Comment je peux récupérer les noms des fichiers avec les bons accents sur le serveur FTP ?

Merci