Poignée à tort caractère codé en Python chaîne unicode
Je fais affaire avec des chaînes unicode retourné par le python-lastfm bibliothèque.
Je suppose que quelque part sur la route, la médiathèque est l'encodage de mal et retourne une chaîne unicode qui peut contenir des caractères non valides.
Par exemple, la chaîne d'origine, je suis dans l'attente de la variable a est "Glück"
>>> un u'Gl\xfcck' >>> print une Traceback (most recent call last): File "", line 1, in UnicodeEncodeError: 'ascii' codec ne peut pas encoder les caractères u'\xfc' à la position 2: ordinal pas in range(128)
\xfc est échappé de la valeur 252, qui correspond à l'encodage latin1 "ü". De toute façon ce sera intégrée dans la chaîne unicode en une façon python ne peut pas gérer sur son propre.
Comment puis-je convertir ce retour à la normal ou une chaîne unicode qui contient l'original "Glück"? J'ai essayé de jouer avec les décoder/encoder les méthodes, mais eu un UnicodeEncodeError, ou une chaîne de caractères contenant la séquence \xfc.
Ce système d'exploitation? Qu'est-ce que
sys.stdout.encoding
?double possible de BeautifulSoup findall avec un attribut de classe - unicode encoder erreur
et quelques dizaines d'autres questions
OriginalL'auteur strfry | 2011-04-22
Vous devez vous connecter pour publier un commentaire.
Votre chaîne unicode est fine:
Le problème que vous voyez à l'invite interactive est que l'interprète ne sait pas ce que l'encodage à utiliser pour la sortie de la chaîne de votre terminal, de sorte qu'il revient à la "ascii" codec-mais ce codec seul sait comment traiter avec des caractères ASCII. Il fonctionne très bien sur ma machine (parce que sys.la sortie standard stdout.l'encodage "UTF-8" pour moi, probablement parce que quelque chose comme mon paramètres des variables d'environnement diffèrent de la vôtre)
La plus répandue de la "poignée de paramètres régionaux-des pages de codes spécifiques" utilisé pour la console Windows est cp850, qui l'un comme l'autre latine, la base est assez heureux pour afficher u tréma correctement. Si vous ne envoyer des ummapped des caractères Unicode en une console Windows, vous n'obtenez pas le cas des OP message parle de la ascii codec. Vous obtenez par exemple
UnicodeEncodeError: 'charmap' codec can't encode character u'\u9876' in position 2: character maps to <undefined>
... nous ne savons toujours pas pourquoi l'OP eu cette erreur.OriginalL'auteur Croad Langshan
Vous devez convertir votre chaîne unicode dans un standard de chaîne à l'aide de certains de codage par exemple utf-8:
En dehors de cela: c'est un dupe de
BeautifulSoup findall avec un attribut de classe - unicode encoder erreur
et au moins dix autres questions connexes. La recherche d'abord.
OriginalL'auteur Andreas Jung
Au début de votre code, juste après les importations, ajouter ces 3 lignes.
Il va remplacer le système de codage par défaut (ascii) pour le cours de votre programme.
Edit: Vous ne devriez pas faire cela, sauf si vous êtes sûr de l'conséquences, voir commentaire ci-dessous. Ce poste est également utile: Dangers du sys.setdefaultencoding('utf-8')
OriginalL'auteur az3
Ne pas str() fonte de la chaîne de ce que vous avez obtenu à partir du modèle de champs, aussi longtemps que c'est une chaîne unicode déjà.
(oups, j'ai totalement raté qu'il n'est pas django)
OriginalL'auteur Artie