2010-03-17 2 views
1

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

Répondre

1

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.

1

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)

0

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 
... 

See PEP for more info on encoding.

0

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.

Questions connexes