2011-03-12 130 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