小编典典

为什么在Python的JSON编码中出现UnicodeDecodeError?

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:] 进行编码而导致的某些数据错误会立即导致错误。这是令人不快的片段:

‘Kaloor的Kadavanthra Road,\ nCochin \ x96 682 017 Gurumadhavendra Towers
2楼

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


更新2 :答案按预期工作:数据来自以“ latin-1-swedish-
ci”编码的MySQL表。我看到了随机数的意义。很抱歉,在诊断故障时会自发地传达头条新闻的精神。


阅读 603

收藏
2020-07-27

共1个答案

小编典典

很简单,如果您的数据不在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实例,并且使用utf-8(例如latin-1)以外的基于ASCII的编码进行编码,则encoding必须指定适当的
名称。不允许使用非基于ASCII的编码(例如UCS-2),并且应首先解码 unicode

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

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