簡體   English   中英

json.dumps拋出UnicodeDecodeError

[英]json.dumps throws UnicodeDecodeError

我在MS ACCESS數據表中的編碼未知 ,因為文本輸入是由人們從Word文檔復制和粘貼產生的。

所以當我嘗試:

final_data_to_write = json.dumps(list_of_text_lines) 

錯誤輸出為:

 "UnicodeDecodeError: 'utf8' codec can't decode byte 0xe1 in position 5: unexpected end of data"

您需要找出數據庫中使用的字符編碼。 然后,您需要告訴JSON編碼器使用該編碼來正確解釋字符串。

final_data_to_write = json.dumps(myDict, encoding="XXX")

json模塊假定的默認編碼為UTF-8。

從Access到Excel的轉換應該將您的數據保存為Unicode。 如果所有Unicode文本都可以在“ ANSI代碼頁”中編碼(可能是cp1252,但不要猜測),那么您將不會通過執行Excel“另存為CSV”來處理任何問題---如果不是,則表示會得到? 字符替換不可編碼的字符。 這些不會導致您當前的問題。

要做的事:

(1)找出什么是您的“ ANSI代碼頁”:

在我的機器上:

command_prompt>\python27\python -c"import locale;print locale.setlocale(locale.LC_ALL,'')"
English_Australia.1252

所以我的是cp1252

(2)嘗試json.dumps(myDict, encoding='cpXXXX')

(3)如果失敗,則需要查看您的數據和CSV到JSON代碼,以查看是否在某處進行處理。 插入一些調試代碼以輸出包含任何非ASCII字符的任何行的行號-對該行的測試為any(c >= '\\x80' for c in line) -並在文本中查看那些行編輯器,並檢查它們是否在您的環境中有意義。

循環遍歷文本行,並對每行編碼如下:

row1 = unicode( list_of_text_line[j] , errors='ignore') 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM