2011-03-12 4 views
4

J'utilise BeautifulSoup, et je reviens une chaîne comme ceci:problème Unicode, décoder correctement/chaîne d'encodage en python

u'Dassault Myst\xe8re' 

Il est unicode, mais ce que je veux est de faire ressembler à:

'Dassault Mystère' 

J'ai essayé

name = name.encode('utf-8'), decode(), unicode() 

L'erreur que je continue à recevoir est:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe8' 

Mon encodage par défaut semble être 'ascii': sys.getdefaultencoding() 'ascii' renvoie même si j'ai:

#!/usr/bin/env python 
# encoding: utf-8 

En haut du fichier. En espérant résoudre ce problème récurrent Unicode une fois pour toutes!

Merci

Répondre

1

Je ne sais pas comment et où vous obtenez ce message, mais regardez ce exmple:

$ python 
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> txt = u'Dassault Myst\xe8re' 
>>> txt 
u'Dassault Myst\xe8re' 
>>> print txt 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    UnicodeEncodeError: 'ascii' codec can't encode character u'\xe8' in position 13: 
    ordinal not in range(128) 
>>> ^D 
$ export LANG=en_US.UTF-8 
$ python 
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> txt = u'Dassault Myst\xe8re' 
>>> txt 
u'Dassault Myst\xe8re' 
>>> print txt 
Dassault Mystère 
>>>^D 

Comme vous pouvez le voir si vous avez une console au format ASCII puis pendant l'impression, il y a une conversion d'unicode en ascii, et s'il y a un caractère en dehors de la portée ASCII - une exception est levée.

Mais si la console peut accepter unicode, alors tout est correctement affiché.

+0

Eh bien, cela a résolu le problème d'impression à la console. Mais j'ai toujours un problème lors de la construction d'une url, parce que quand j'ajoute - 'Dassault Myst \ xe8re' url urllib2 étouffe dessus quand je fais une requête http. Je suppose qu'il attend une chaîne ASCII, et j'envoie autre chose? – Maverick

+0

Mon URL ressemble à ceci: uhttp: //www.youtube.com/results? Search_query = Dassault + Myst \ xe8re & aq = 0 ' et urllib2 n'aime pas que cela semble. – Maverick

+0

2ème partie résolu en utilisant cette réponse: http://stackoverflow.com/questions/4389572/how-to-fetch-a-non-ascii-url-with-python-urlopen – Maverick