UnicodeDecodeError: 'ascii' codec ne peut pas décoder les octets 0xc3 en position 23: ordinal pas in range(128)
quand j'essaie de les concaténer ceci, j'obtiens le UnicodeDecodeError lorsque le champ contient " ñ " ou ". Si le champ qui contient le " ñ " ou " est la dernière je n'obtiens pas d'erreur.
#...
nombre = fabrica
nombre = nombre.encode("utf-8") + '-' + sector.encode("utf-8")
nombre = nombre.encode("utf-8") + '-' + unidad.encode("utf-8")
#...
return nombre
une idée? Merci beaucoup!
- Double Possible de Python - 'ascii' codec ne peut pas décoder les octets
Vous devez vous connecter pour publier un commentaire.
L'encodage en UTF-8, puis re-le codage UTF-8. Python ne peut le faire que si d'abord décode de nouveau à l'Unicode, mais il doit utiliser la valeur par défaut ASCII codec:
Ne gardez pas l'encodage; laisser le codage UTF-8 au dernier moment possible à la place. Concaténer des valeurs Unicode à la place.
Vous pouvez utiliser
str.join()
(ou, plutôt,unicode.join()
) ici pour concaténer les trois valeurs avec des tirets entre les deux: lemais même encodage ici, peut-être trop tôt.
Règle de base: décoder le moment où vous recevez la valeur (si ce n'est de l'Unicode des valeurs fournies par l'API déjà), coder uniquement lorsque vous disposez d' (si la destination de l'API ne gère pas l'Unicode des valeurs directement).
Lorsque vous obtenez une
UnicodeEncodeError
, cela signifie que quelque part dans votre code, vous convertir directement une chaîne d'octets à une unicode un. Par défaut en Python 2, il utilise le codage ascii, et l'encodage utf8 dans Python3 (les deux peuvent échouer parce que pas chaque octet est valable dans les deux encodage)Pour éviter cela, vous devez utiliser explicite de décodage.
Si vous pouvez avoir 2 codage différent dans votre fichier d'entrée, l'un d'eux accepte n'importe quel octet (dire UTF8 et Latin1), vous pouvez essayer d'abord de convertir une chaîne de caractères avec la première et utiliser la seconde si un UnicodeDecodeError se produit.
Si vous ne savez pas de codage d'origine et ne se soucient pas pour les non caractères ascii, vous pouvez définir l'option
errors
paramètre de ladecode
méthode pourreplace
. Toute récidive octet sera remplacé (à partir de la norme de documentation de la bibliothèque):J'ai été faire cette erreur lors de l'exécution en python3,j'ai eu le même programme de travail simplement en cours d'exécution dans
python2