Impossible de décoder chaîne unicode en Python 2.4
C'est en python 2.4. Voici ma situation. Je tire une chaîne à partir d'une base de données, et qu'il contient une umlauted 'o' (\xf6). À ce stade, si je lance type(valeur) renvoie str. J'ai ensuite tenter de l'exécuter .decode('utf-8'), et j'obtiens une erreur ('utf8' codec ne peut pas décoder les octets en position 1-4).
Vraiment mon but ici est juste de réussir à faire un type(valeur) rendement de l'unicode. J'ai trouvé un question précédente
que certains avaient des informations utiles, mais l'exemple de la de la cueillis réponse ne semble pas fonctionner pour moi. Est-il quelque chose que je fais de mal ici?
Voici un peu de code pour reproduire:
Name = 'w\xc3\xb6rner'.decode('utf-8')
file.write('Name: %s - %s\n' %(Name, type(Name)))
Je n'ai jamais réellement obtenir la radiation de la déclaration, parce qu'il échoue à la première instruction.
Merci pour votre aide.
Edit:
J'ai vérifié que la DB, charset est utf8. Donc dans mon code pour reproduire j'ai changé '\xf6' '\xc3\xb6', et la défaillance se produit encore. Est-il une différence entre 'utf-8' et 'utf8'?
La pointe sur l'utilisation de codecs pour écrire dans un fichier est à portée de main (je vais certainement l'utiliser), mais dans ce cas, je ne suis qu'un écrit dans un fichier journal à des fins de débogage.
decode
à la place.OriginalL'auteur Rob Lund | 2009-03-20
Vous devez vous connecter pour publier un commentaire.
Pas dans la première ligne, il n'est pas:
La deuxième ligne de l'erreur si:
Qui est tout à fait ce que vous attendez, à essayer d'écrire des non-ASCII des caractères Unicode en un flux d'octets. Si vous utilisez Jiri la suggestion d'un des codecs gainé de flux, vous pouvez écrire Unicode directement, sinon, vous devrez ré-encoder la chaîne Unicode en octets manuellement.
Mieux, à des fins de journalisation, serait tout simplement de cracher une repr() de la variable. Ensuite, vous n'avez pas à vous soucier de caractères Unicode d'être là, ou des retours à la ligne ou d'autres caractères indésirables:
OriginalL'auteur bobince
Votre chaîne n'est pas dans l'encodage UTF8. Si vous voulez à "décoder" chaîne de caractères au format unicode, votre chaîne doit être dans l'encodage spécifié par le paramètre. J'ai essayé et ça fonctionne parfaitement:
MODIFIER
Pour écrire des chaînes unicode pour le fichier, vous pouvez utiliser les codecs module:
Il est utile de spécifier le codage de l'entrée/sortie et à l'aide de "unicode" chaîne tout au long de votre code sans se soucier des codages différents.
import codecs
etcodecs.open()
. De grandes choses!OriginalL'auteur Jiri
C'est évidemment 1 octet codant. 'ö' en UTF-8 '\xc3\xb6'.
L'encodage pourrait être:
OriginalL'auteur vartec
Vous devez utiliser "ISO-8859-1":
utf-8 utilise 2 octets pour échapper à quelque chose d'extérieur à l'ascii, mais ici c'est juste 1 octet, iso-8859-1 est probablement correcte.
OriginalL'auteur Staale