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 :
Là je suiis perdu
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()
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
Partager