2013-06-20 176 views
2

我得到這個字符串'Velcro Back Rest \xa36.99'。請注意,它的前面沒有u。它只是簡單的ascii。UnicodeDecodeError:'ascii'編解碼器無法解碼字節0xa3

如何將其轉換爲unicode?

我想這一點,

>>> unicode('Velcro Back Rest \xa36.99') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa3 in position 17: ordinal not in range(128) 

This answer很好的解釋。但我有same question作爲該問題的OP。在該評論的答案溫斯頓says "You should not encoding a string object ..."

但我工作的框架要求它應該被轉換爲unicode字符串。我使用scrapy,我有這條線。

loader.add_value('name', product_name) 

這裏product_name包含有問題的字符串,它拋出的錯誤。

回答

11

您需要指定一個編碼的字節,解碼成Unicode:

>>> 'Velcro Back Rest \xa36.99'.decode('latin1') 
u'Velcro Back Rest \xa36.99' 
>>> print 'Velcro Back Rest \xa36.99'.decode('latin1') 
Velcro Back Rest £6.99 

在這種情況下,我能夠從經驗猜測編碼,您需要提供用於每個編碼正確的編解碼器你遇到。對於網絡數據,即通常包括在從內容類型報頭的:

Content-Type: text/html; charset=iso-8859-1 

其中iso-8859-1是官方標準名稱拉丁1編碼例如。 Python將latin1識別爲iso-8859-1的別名。

請注意,您的輸入數據是而不是純ASCII。如果是,它只會使用0到127之間的字節; \xa3是十進制的163,因此超出了ASCII範圍。

+0

一個完美的答案。我希望我能+2你。 –

+0

不要擔心@GenghisKhan,我找到了你 – Hassan

相關問題