2017-10-06 7 views
1
>>> a=os.listdir('.') 
>>> a 
['arabic??.exe', 'asd.exe', 'chinese??.exe', 'cyrilic??.exe', 'french\xe7\xe9\xfc.exe', 'german\xe4\xdf\xfc.exe', 'registred\xae\xa9.exe', 'sandbox.py', 'spanish\xc1\xcd\xd3.exe'] 
>>> for each in a: 
... os.system(os.getcwd()+'\\'+each) 
... 
The system cannot find the path specified. 

J'essaie d'ouvrir certains fichiers avec des caractères étranges, mais le code ci-dessus ne fonctionne que pour les langues latines. Que puis-je faire pour obtenir l'encodage correct pour tous les fichiers et les ouvrir correctement? ou s'il y a une solution de contournement pour cela?Python: Comment obtenir le bon codage à partir d'un nom de fichier

Notez que la logique ci-dessus fonctionne bien sur les systèmes Linux.

Noms de fichiers: cyrilicЧБ; chinois french; frenchçéü; arabe شص; spanishÁÍÓ.exe, registred® © .exe, germanäßü.exe

Répondre

0

Works si vous passez le chemin du répertoire comme une chaîne Unicode, par exemple:

os.listdir(u'.') 

Edit # 0:

Vous devez également ajouter l'en-tête suivant à votre script Python:

# -*- coding: utf-8 -*- 

Vous pouvez en savoir plus sur ce ici: https://www.python.org/dev/peps/pep-0263/

+0

il me donne cette erreur quand je passe comme unicode: retraçage (le plus récent appel dernier): Fichier « », ligne 2, en UnicodeEncodeError: « ascii 'codec ne peut pas encoder les caractères dans la position 41-42: ordinal pas dans la gamme (128) Si je le laisse comme octet au moins, il passe les arguments à l'os.system – xRow

+0

Avez-vous spécifié l'encodage pour votre fichier de script Python ? Veuillez vérifier la réponse mise à jour. – schaazzz

+0

oui, j'ai essayé avec la ligne de codage, a également essayé d'encoder les noms avec .encode (sys.getfilesystemencoding() mais il ne fait aucune différence visible et je suis un peu coincé ici, merci pour l'aide de toute façon – xRow