UnicodeDecodeError : le codec 'ascii' ne peut pas décoder l'octet
Le problème
Lors de la tentative de conversion d'une chaîne Python 2.x contenant des caractères non- Caractères ASCII dans une chaîne Unicode, vous pouvez rencontrer le message "UnicodeDecodeError : codec 'ascii' Impossible de décoder l'erreur "octet". Cela se produit car le comportement par défaut consiste à assumer le codage ASCII, qui ne peut pas gérer les caractères non-ASCII.
Correction rapide
- Assurez-vous de décoder explicitement les chaînes en chaînes Unicode.
- Ne présumez pas que les chaînes sont codées en UTF-8.
- Convertissez les chaînes en chaînes Unicode comme le plus tôt possible dans le code.
- Envisagez de corriger vos paramètres régionaux pour une meilleure gestion d'Unicode.
- Évitez les hacks de rechargement rapide.
Comprendre Unicode dans Python 2.x
Les chaînes Unicode n'ont pas d'encodage et contiennent des codes de points Unicode, tandis que les chaînes contiennent du texte codé (par exemple, UTF-8, UTF-16). L'utilisation d'unicode() par le module Markdown comme contrôle de qualité garantit que les chaînes entrantes sont des chaînes Unicode.
Gotchas et exemples
- Conversion explicite sans encodage : unicode('€')
- Nouveau style de chaîne de format en chaîne Unicode : u"La devise est : {}".format('€')
- Chaîne de format ancien dans une chaîne Unicode : u'La devise est : %s' % '€'
- Ajouter une chaîne à Unicode : u' La devise est : '€'
Le Sandwich Unicode
Établissez un "sandwich Unicode" dans votre code : décoder les données d'entrée en Unicode, travailler avec des chaînes Unicode et encoder en chaînes en sortie. Cela évite les problèmes d'encodage au milieu du code.
Saisie et décodage
- Définissez les chaînes Unicode dans le code source avec le préfixe 'u' (par exemple, u'Zürich').
- Définissez l'en-tête d'encodage correct pour le code source contenant des caractères non-ASCII (par exemple, # encoding : utf-8).
- Utilisez io.open avec l'encodage approprié pour la saisie de fichiers texte.
- Utilisez backports.csv pour gérer les fichiers CSV non-ASCII.
- Configurez les bases de données pour renvoyer des données Unicode.
- Décoder manuellement le contenu HTTP en fonction de l'en-tête Content-type charset.
Output
- print() tente d'encoder les Unicodes selon l'encodage de la console.
- l'encodage stdout peut être forcé avec la variable d'environnement PYTHONIOENCODING.
- Utilisez io.open pour encoder les Unicodes en chaînes d'octets pour le fichier sortie.
Différences de Python 3
- La chaîne de Python 3 est une chaîne Unicode.
- L'encodage par défaut est UTF-8.
- open() fonctionne en mode texte par défaut, renvoyant la chaîne décodée (Unicode ceux).
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!