Je reçoiserreur :: UnicodeDecodeError
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 104: ordinal not in range(128)
J'utilise intgereproparty
, stringproparty
, datetimeproparty
Je reçoiserreur :: UnicodeDecodeError
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 104: ordinal not in range(128)
J'utilise intgereproparty
, stringproparty
, datetimeproparty
C'est parce que 0xb0
(décimal 176) est pas un code de caractère valide en ASCII (qui définit uniquement les valeurs entre 0 et 127).
Vérifiez d'où provient cette chaîne et utilisez le codage approprié.
Si vous avez besoin d'aide, postez le code.
Vous essayez de mettre des données Unicode (probablement du texte avec des accents) dans une chaîne ASCII.
Vous pouvez utiliser le module de codecs de Python pour ouvrir un fichier texte avec un codage UTF-8 et y écrire les données Unicode.
La méthode .encode
peut aussi aider (u"õ".encode('utf-8')
par exemple)
Par défaut, Python codage ASCII - si vous faites affaire avec les caractères en dehors de la plage ASCII, vous devez spécifier que dans votre code.
Une façon de procéder consiste à définir la définition de l'encodage en haut de votre code.
Cet extrait définit l'encodage en haut du fichier à coder pour Latin-1 (qui comprend 0xb0
):
#!/usr/bin/python
# -*- coding: latin-1 -*-
import os, sys
...
Quand j'écris mes programmes en langues étrangères "flashcard", J'utilise toujours python 3.x car son encodage natif est utf-8. Vos problèmes d'encodage seront généralement beaucoup moins fréquents. Si vous travaillez sur un programme que beaucoup de personnes partageront, vous pouvez envisager d'utiliser encode
et decode
avec python 2.x, mais uniquement lorsque vous stockez et récupérez des éléments de données dans un stockage persistant. encode
vos caractères non-ASCII, manipulez en silence les représentations hexadécimales de ces chaînes Unicode en mémoire, et enregistrez-les en hexadécimal. Enfin, utilisez decode
lors de l'extraction des chaînes Unicode d'un stockage persistant, mais uniquement pour l'affichage de l'utilisateur final. Cela permettra d'éliminer le besoin constant de vos chaînes dans votre programme.
@jcoon a également une réponse assez standard à ce problème.