Problème d'encodage
Elponito
Messages postés
51
Date d'inscription
Statut
Membre
Dernière intervention
-
Elponito Messages postés 51 Date d'inscription Statut Membre Dernière intervention -
Elponito Messages postés 51 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
J'ai une erreur que je n'arrive pas à corriger, j'ai un script (que @gravgun m'a soufflé) qui parcours mon arborescence et pour certain fichier j'ai un problème apparemment avec le nom..
et voici l'erreur:
je ne précise pas d'encodage et puisque il s'agit de python 3, c'est donc de l'utf-8
mon fichier est enregistré en utf-8 également.. J'ai cherché mais je n'ai rien trouvé, si quelqu'un peux m'aider cela serait top car je commence à désespéré..
Merci d'avance
J'ai une erreur que je n'arrive pas à corriger, j'ai un script (que @gravgun m'a soufflé) qui parcours mon arborescence et pour certain fichier j'ai un problème apparemment avec le nom..
import os, time year = 365*24*60*60 source = "C:\\" taille = sizeOffice = sizeGraphic = sizeVideo = sizeMail = 0 office = '.ppt', '.pptm', '.pptx' graphic = '.jpg' video = '.mp4', '.mov', '.avi', '.vob', '.wmv' mail = '.pst' for root, direc, filenames in os.walk(source): for filename in filenames: dir_path = os.path.join(root, filename) if filename.lower().endswith((office)): if time.time() - os.path.getatime(os.path.join(root, filename)) > 2*year: print(dir_path) taille += os.path.getsize(os.path.join(root, filename)) sizeOffice += os.path.getsize(os.path.join(root, filename)) elif filename.lower().endswith((graphic)): if time.time() - os.path.getatime(os.path.join(root, filename)) > 3*year: print(dir_path) taille += os.path.getsize(os.path.join(root, filename)) sizeGraphic += os.path.getsize(os.path.join(root, filename)) elif filename.lower().endswith((video)): if time.time() - os.path.getatime(os.path.join(root, filename)) > 3*year: print(dir_path) taille += os.path.getsize(os.path.join(root, filename)) sizeVideo += os.path.getsize(os.path.join(root, filename)) elif filename.lower().endswith((mail)): print(dir_path) taille += os.path.getsize(os.path.join(root, filename)) sizeMail += os.path.getsize(os.path.join(root, filename)) taille //= 1000*1000*1000 print("Les fichiers listés représentent:", taille,"Go") print("part de fichiers: ") print("office: ", sizeOffice) print("graphic: ", sizeGraphic) print("video: ", sizeVideo) print(".pst: ", sizeMail)
et voici l'erreur:
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\x81' in position 102: character maps to <undefined>
je ne précise pas d'encodage et puisque il s'agit de python 3, c'est donc de l'utf-8
mon fichier est enregistré en utf-8 également.. J'ai cherché mais je n'ai rien trouvé, si quelqu'un peux m'aider cela serait top car je commence à désespéré..
Merci d'avance
A voir également:
- Problème d'encodage
- Encodage ascii - Guide
- Encodage binaire - Guide
- Parametre d'encodage non pris en charge - Guide
- Le flux d’octets était en erreur par rapport à l’encodage de caractères déclaré. la déclaration d’encodage des caractères était peut être incorrecte. ✓ - Forum Programmation
- Soucis d'encodage ✓ - Forum PHP
2 réponses
'lut, me revoilà ;)
Tu as la trace des appels qui a donné cette erreur?
Après quelques recherches, c'est très probablement le print qui fout tout en l'air: Windows est mal fait sur ce point: sa console déteste la sortie en Unicode. Python devrait gérer ça avec la fonction API Windows
J'ai trouvé ça sur ce topic StackOverflow et ils propose un code pour permettre l'écriture de noms internationaux dans la console, tu peux t'en servir.
Mais ça reste moche.
Tu as la trace des appels qui a donné cette erreur?
Après quelques recherches, c'est très probablement le print qui fout tout en l'air: Windows est mal fait sur ce point: sa console déteste la sortie en Unicode. Python devrait gérer ça avec la fonction API Windows
WriteConsole, mais pour garder une continuité avec les autres OS et mécanismes, il utilise la sortie standard. Or, Python ne sait pas encoder les noms bizzares pour cette console encodée en CP-jesaispasquoi.
J'ai trouvé ça sur ce topic StackOverflow et ils propose un code pour permettre l'écriture de noms internationaux dans la console, tu peux t'en servir.
Mais ça reste moche.
Encore une fois merci @gravgun :) Tu as tout à fait raison c'est bien la commande print qui fous la merde, du coup j'avais remplacer avec ceci:
mais ça me met des point d'interrogation du coup dans mes noms de fichiers et je redirige les sorties vers un fichier texte et de ce fait je peux pas réutiliser le résultat.. Je vais me pencher sur ta solution, encore une fois merci pour ton aide précieuse :)
print(os.path.join(root, filename).encode(sys.stdout.encoding,'replace'))
mais ça me met des point d'interrogation du coup dans mes noms de fichiers et je redirige les sorties vers un fichier texte et de ce fait je peux pas réutiliser le résultat.. Je vais me pencher sur ta solution, encore une fois merci pour ton aide précieuse :)