UnicodeDecodeError : le codec 'ascii' ne peut pas décoder l'octet se produit généralement lorsque vous tentez de convertir une chaîne Python 2.x contenant des caractères non-ASCII en une chaîne Unicode sans spécifier l'encodage de la chaîne d'origine.
Les chaînes Unicode (également appelées Unicodes) sont un type de chaîne distinct en Python qui contient des codes de points Unicode et peut représenter n'importe quel Unicode. point sur tout le spectre. En revanche, les chaînes contiennent du texte codé dans différents formats (par exemple, UTF-8, UTF-16, ISO-8895-1).
Les développeurs du module Markdown utilisent probablement unicode() comme contrôle de qualité pour garantir les flux entrants. les chaînes sont Unicode. Puisqu'ils ne peuvent pas déterminer l'encodage de la chaîne entrante, vous devez la décoder avant de la transmettre à Markdown.
Les chaînes Unicode peuvent être déclarées dans votre code avec le préfixe "u" :
my_u = u'my ünicôdé strįng' print(type(my_u)) # <type 'unicode'>
Les chaînes Unicode peuvent également provenir de fichiers, de bases de données ou de modules réseau, pour lesquels vous n'avez pas besoin de spécifier le encodage.
La conversion Unicode peut se produire même sans appels explicites unicode() :
# Explicit conversion without encoding unicode('€') # New-style format string into Unicode string # Python attempts to convert value string to Unicode first u"The currency is: {}".format('€') # Old-style format string into Unicode string # Python attempts to convert value string to Unicode first u'The currency is: %s' % '€' # Append string to Unicode # Python attempts to convert string to Unicode first u'The currency is: ' + '€'
Dans le diagramme suivant, "café " est codé différemment en " UTF-8 " et " Cp1252 " selon le type de terminal. Dans les deux cas, « caf » est codé en ASCII simple. Alors que UTF-8 utilise deux octets pour représenter « é », Cp1252 utilise un seul octet qui correspond également à la valeur du point Unicode. Dans ce cas, decode() est invoqué avec le codage correct et une conversion réussie en Unicode est effectuée :
[Diagramme d'une conversion Unicode réussie avec le codage correct]
Cependant, si decode () est appelé avec "ascii", ce qui revient à appeler unicode() sans spécifier de codage, une UnicodeDecodeError sera se produire :
[Diagramme d'une conversion Unicode échouée avec un mauvais encodage]
Il est recommandé de créer un "sandwich Unicode" dans votre code, où vous :
Cette approche vous évite d'avoir à vous soucier de l'encodage des chaînes tout au long de votre code.
Pour les fichiers, utilisez le TextWrapper du module io avec l'encodage approprié :
my_u = u'my ünicôdé strįng' print(type(my_u)) # <type 'unicode'>
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!