2011-03-12 129 views
4

我使用BeautifulSoup正确解码/编码字符串,我回来一个字符串是这样的:Unicode的问题,蟒蛇

u'Dassault Myst\xe8re' 

这是一个unicode的,但我要的是使它看起来像:

'Dassault Mystère' 

我已经试过

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

我不断收到的错误是:

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

我的默认编码似乎是 'ASCII':sys.getdefaultencoding()返回 'ASCII' 即使我有:

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

在文件的顶部。

希望一劳永逸地解决这个反复出现的Unicode问题!

感谢

回答

1

我不知道该怎么和你在哪里得到这个消息,但看看这个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 

所以你可以看到,如果你的打印过程中有一个控制台为ASCII然后,有一个从unicode到ascii的转换,如果在ASCII范围外有字符 - 引发异常。

但是,如果控制台可以接受unicode,那么一切正常显示。

+0

那么,这固定打印到控制台问题。 但是当我建立一个url时,我仍然有一个问题,因为当我发出一个http请求时,在它上面追加 - u'Dassault Myst \ xe8re'url urllib2扼流器。我猜这是期待一个ascii字符串,而我正在发送别的东西? – Maverick 2011-03-12 22:44:42

+0

我的网址看起来像这样:u'http://www.youtube.com/results?search_query = Dassault + Myst \ xe8re&aq = 0' 和urllib2并不喜欢它。 – Maverick 2011-03-12 22:47:27

+0

第二部分解决使用这个答案︰http://stackoverflow.com/questions/4389572/how-to-fetch-a-non-ascii-url-with-python-urlopen – Maverick 2011-03-12 22:55:11