2011-03-10 2 views
8

Je lis les noms de fichiers du système de fichiers et je veux les envoyer en tant que tableau codé JSON. Le problème est que les fichiers sur le système de fichiers peuvent être stockés dans un encodage invalide, et j'ai besoin de gérer cette situation pour omettre les noms de fichiers invalides avant de le passer à json.dump, sinon il échouera.Vérification de la chaîne utf8 valide en Python

Existe-t-il un moyen de vérifier que ma chaîne (filename) contient des caractères utf-8 valides?

+2

me choquent. * Pourquoi * les fichiers n'auraient-ils pas de noms de fichier UTF-8 valides? –

+0

c'est le nom de fichier qui n'est pas encodé dans utf-8 ou est-ce les données dans le fichier ?? Je suis confus. – mouad

+2

Que diriez-vous d'un logiciel buggé qui crée des noms de fichiers basés sur des tags ID3 sans vérifier l'encodage? Ou montage (avec les mauvaises options) d'un ancien système de fichiers qui utilise un codage de caractères impairs pour les noms de fichiers? –

Répondre

17

Pourquoi ne pas essayer ce qui suit?

valid_utf8 = True 
try: 
    filename.decode('utf-8') 
except UnicodeDecodeError: 
    valid_utf8 = False 

... basée sur une réponse à une question similaire ici: How to write a check in python to see if file is valid UTF-8?

+0

if isinstance (nomfichier, unicode): print "chaîne unicode" – mithuntnt

+0

@mithuntnt: la question ne demande pas si une chaîne Python est un 'unicode'; c'est demander si les octets le composent un nom de fichier dans le système de fichiers sont UTF-8 valides. –

+0

Pour moi, j'ai dû attraper l'erreur UnicodeEncodeError dans ce cas ... –