2012-04-04 54 views
0

因此,在短期我的情況是這樣的:的Python 2.7編碼和feedparser

  • 閱讀來自RSS訂閱源數據
  • 打印內容到終端

課程和內容不簡單的ascii,它是utf-8,所以我得到了像「ääå」這樣的字符。但是,當我打印文本時,它們都會被像'\ xe4'這樣的ecapes混淆。與編碼有關,但我無法理解這一點。這應該是如此微不足道,但谷歌讓我失望。

一個例子是,當我經歷的內容一字一句,並試圖找到字符「ö」:我做的:

if u"ö" in word: 

剛剛給出:UnicodeDecodeError錯誤:「ASCII」編解碼器」牛逼解碼字節0xc3位置6 ...

編輯:

所以我覺得我找到了我的問題。我得到的飼料項目,然後只是做str(entry.content)並將其傳遞給它,但是entry.content是一個列表,其中包含一個以unicode字符串作爲值的字典,所以我所做的(我猜)只是獲得了一個ascii詞典內容的表示...

+0

http://nedbatchelder.com/text/unipain.html – 2012-04-04 13:39:43

回答

2

您正試圖將編碼文本與Unicode相比較。 Python不知道編碼後的文本是UTF-8,所以它猜測它是ASCII碼,並嘗試將它解碼爲unicode。解決方案是用適當的編碼來顯式解碼。

查看Python Unicode HOWTO瞭解更多信息。

我可以使用此文件重現你的問題:

# coding: utf-8 

word = "öäå" 
if u"ö" in word: 
    print True 

而與此文件修復:

# coding: utf-8 

word = "öäå".decode('utf-8') 
if u"ö" in word: 
    print True 
+0

我想我的問題是,雖然這個詞的內容應該是「高齡津貼」我從解析器得到的東西只是逃脫像「\ XE4」,他們是str的類型,而我認爲我應該有unicodes。所以我需要一種方法將這些轉義轉換回真實的表示。或者類似的東西,讓這個問題很頭痛:D – Guu 2012-04-04 13:42:49

+0

雖然問題是由於我自己的失敗和RTFM的不可能性,我仍然接受這個。 – Guu 2012-04-04 13:57:20

+0

@Guu僅僅因爲它們在您的REPL或終端中顯示爲轉義並不意味着它們被存儲爲eascapes - 它們不是,或者您不會得到該錯誤。這就是如何在ASCII環境中顯示高於128的字節值。 – agf 2012-04-04 14:16:46

0

如果你知道你的文字是UTF-8,您可以將其解碼成在開始使用它們之前,請使用對象。只要讀取文件中的字節,就可以使用字符串decode()方法word.decode('UTF8')解碼它們以返回unicode對象。