2012-08-01 56 views
0

我現在有一個計劃,從網站和端口它抓住足球數據爲dictJSON轉儲的UnicodeDecodeError

dict5[name] = ['To: ' + toteam, 'From: ' + fromteam, 'Price: ' + price, 'Date: ' + newdate] 

該網站是在葡萄牙和本地編碼是UTF-8。該toteam,fromteam,價格和日期都預編碼爲UTF-8,只是在dict字符串連接在一起。該程序運行得很好,並打印到stdout沒有問題,當我嘗試它轉儲到這樣一個JSON文件...

with open('test.json', 'w') as f: 
    f.write(json.dumps(dict5, indent=2)) 

...它與下面的錯誤出現:

Traceback:.... 
C:\Python27\lib\json\__init__.py, line 238, in dumps 
    **kw).encode(obj) 
C:\Python27\lib\json\encoder.py, line 203, in encode 
    chunks = list(chunks) 
C:\Python27\lib\json\encoder.py, line 428, in _iterencode 
    for chunk in _iterencode_dict(o, _current_indent_level): 
C:\Python27\lib\json\encoder.py, line 381, in _iterencode_dict 
    yield_encoder(key) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0xc3 in position 0: invalid continuation byte 

這主要是另一個程序從同一網站抓取的副本,具有相同的編碼,但是一個正常工作。

我覺得有,我不是抓的unicode岬的一些元素。任何人都可以對此有所瞭解嗎?

+0

總是有用的:http://bit.ly/unipain – Daenyth 2012-08-01 19:36:41

+0

而如何重現與數據? – 2012-08-01 19:36:55

+1

檢查如果'name'是一個字節串那麼它也被編碼爲UTF-8。順便說一句,你可以使用'json.dump(dict5,f)' – jfs 2012-08-01 20:08:31

回答

2

The toteam, fromteam, price, and dates are all pre-encoded as utf-8

您的問題。 Use unicodes instead.

+0

它們被解碼爲unicode,然後重新編碼爲本地utf-8用於測試目的。這是錯的嗎?我看不出它如何影響傾銷JSON – user1549620 2012-08-01 19:45:12

+0

是的,是的,它是。 – 2012-08-01 19:47:26

+0

@ user1549620:JSON適用於unicode;因此,傳遞給json模塊的數據也必須是unicode。不要傳遞utf-8編碼的字節串。 – 2012-08-01 19:54:10