为什么我在Python JSON编码中得到UnicodeDecodeError?

时间:2011-08-22 10:20:02

标签: python json

我正在使用Solr 3.3来索引我的数据库中的东西。我用Python编写JSON内容。我设法上传了2126条记录,共计523246个字符(约511kb)。但是当我尝试2027条记录时,Python给了我错误:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "D:\Technovia\db_indexer\solr_update.py", line 69, in upload_service_details
    request_string.append(param_list)
  File "C:\Python27\lib\json\__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "C:\Python27\lib\json\encoder.py", line 203, in encode
    chunks = list(chunks)
  File "C:\Python27\lib\json\encoder.py", line 425, in _iterencode
    for chunk in _iterencode_list(o, _current_indent_level):
  File "C:\Python27\lib\json\encoder.py", line 326, in _iterencode_list
    for chunk in chunks:
  File "C:\Python27\lib\json\encoder.py", line 384, in _iterencode_dict
    yield _encoder(value)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x96 in position 68: invalid start byte 

哎哟。 512kb的字节是一个基本限制吗?是否有现有JSON模块的高容量替代品?


更新:由于尝试编码* biz_list [2126:] *会导致立即错误,因此会出现一些数据错误。这是令人讨厌的部分:

  

'Gurumadhavendra Towers二楼,\ nKadavanthra Road,Kaloor,\ nCochin \ x96 682 017'

如何配置它以便可以编码为JSON?


更新2 :答案按预期工作:数据来自以“latin-1-swedish-ci”编码的MySQL表格。我在一个随机数字中看到了重要性。很抱歉在诊断错误时会自发地引导标题作者的精神。

1 个答案:

答案 0 :(得分:14)

简单,如果您的数据不在utf-8

中,请不要使用utf-8编码
>>> json.loads('["\x96"]')
....
UnicodeDecodeError: 'utf8' codec can't decode byte 0x96 in position 0: invalid start byte

>>> json.loads('["\x96"]', encoding="latin-1")
[u'\x96']
  

<强> json.loads

     

如果sstr实例并且使用基于ASCII的编码   除了utf-8之外的编码(例如拉丁语-1)然后是合适的   必须指定encoding名称。编码不是ASCII   基于(例如UCS-2)是不允许的,应该解码为   unicode首先。

编辑:要获得正确的unicode值“\ x96”,请使用“cp1252”,如Eli Collins所述

>>> json.loads('["\x96"]', encoding="cp1252")
[u'\u2013']