2012-09-22 40 views
2

奇怪的錯誤與我的Unicode。我正在處理的unicode很好,但是當我今天早上跑了一個項目U「\]後,」給了錯誤,並給了我Unicode錯誤序號不在範圍內

UnicodeError: ASCII encoding error: ordinal not in range(128) 

我擡起頭的代碼,顯然它的UTF-32,但是當我嘗試解碼它的解釋:

c = u'\u201d' 
c.decode('utf-32', 'replace') 

或者與任何其他操作對於這個問題,它只是不承認它在任何編解碼器,但我卻發現它是「右雙引號」

我得到:

Traceback (most recent call last): 
File "<pyshell#154>", line 1, in <module> 
    c.decode('utf-32') 
    File "C:\Python27\lib\encodings\utf_32.py", line 11, in decode 
    return codecs.utf_32_decode(input, errors, True) 
UnicodeEncodeError: 'ascii' codec can't encode character u'\u201d' in position 0: ordinal not in range(128) 

回答

6

你已經有了一個unicode字符串,不需要將它解碼爲一個unicode字符串再次

在這種情況下會發生什麼是python有用地嘗試首先編碼它,這樣你就可以從utf-32解碼它。它使用默認編碼來完成,這恰好是ASCII。這是一個明確的編碼向您展示在這種情況下引發的異常:

>>> u'\u201d'.encode('ASCII') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeEncodeError: 'ascii' codec can't encode character u'\u201d' in position 0: ordinal not in range(128) 

總之,當你有像字面一個u'' unicode的,沒有必要對它進行解碼。

請閱讀關於Python Unicode HOWTO中的unicode,編碼和默認設置。關於這個問題的另一篇寶貴文章是Joel Spolsky的Minimun Unicode knowledge的帖子。

+0

是否有任何'unicode.decode'的實際情況? – Kos

+0

關於unicode知識的偉大文章,我肯定是那些希望最好的哈哈之一,但我仍然不能讓特定的代碼出現! – rodling

+0

@Kos:它適用於一些僞編解碼器,比如'u'FF'.decode('hex')' –