2010-03-17 82 views
1

我越來越錯誤::的UnicodeDecodeError

UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 104: ordinal not in range(128) 

我使用intgerepropartystringpropartydatetimeproparty

回答

1

這是因爲0xb0(十進制176)是不是在ASCII有效的字符代碼(這間僅定義值0和127)。

檢查你從哪裏得到該字符串,並使用正確的編碼。

如果您需要更多幫助,請發佈代碼。

1

您試圖將Unicode數據(可能帶有重音的文本)放入ASCII字符串中。

您可以使用Python的編解碼器模塊打開一個UTF-8編碼的文本文件,並將Unicode數據寫入它。

.encode方法還可以幫助(u"õ".encode('utf-8')例如)

0

的Python默認爲ASCII編碼 - 如果你正在處理的ASCII範圍之外的字符,你需要指定在你的代碼。

這樣做的一種方法是在代碼頂部設置編碼定義。

這個片段設置編碼在文件的頂部編碼拉美-1(其中包括0xb0):

#!/usr/bin/python 
# -*- coding: latin-1 -*- 
import os, sys 
... 

See PEP for more info on encoding.

0

當我寫我的外語「閃卡」的方案,我總是使用python 3.x作爲它的本地編碼是utf-8。編碼問題通常會少得多。

如果你的程序,很多人將分享工作,但是,你可能要考慮使用encodedecode與Python 2.x中,但只有存儲和檢索的持久性存儲的數據元素時。 encode您的非ASCII字符,以靜默方式處理內存中這些unicode字符串的十六進制表示形式,並將它們保存爲十六進制。最後,從持久存儲中獲取unicode字符串時使用decode,但僅限最終用戶顯示。這將消除你的程序中不斷需要你的字符串encodedecode

@jcoon對這個問題也有相當標準的迴應。