我正在使用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表格。我在一个随机数字中看到了重要性。很抱歉在诊断错误时会自发地引导标题作者的精神。
答案 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 强>
如果
s
是str
实例并且使用基于ASCII的编码 除了utf-8之外的编码(例如拉丁语-1)然后是合适的 必须指定encoding
名称。编码不是ASCII 基于(例如UCS-2)是不允许的,应该解码为unicode
首先。
编辑:要获得正确的unicode值“\ x96”,请使用“cp1252”,如Eli Collins所述
>>> json.loads('["\x96"]', encoding="cp1252")
[u'\u2013']