当前位置: 首页 > 面试题库 >

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

韩琛
2023-03-14
问题内容

我正在使用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表。我看到了随机数的意义。很抱歉,在诊断故障时会自发地传达头条新闻的精神。


问题答案:

很简单,如果您的数据不在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']


 类似资料:
  • 问题内容: 有人知道什么是“不良状态线”吗? 编辑:我尝试了许多服务器,许多URL的,我仍然收到此错误? 问题答案: 从httplib(Python 2) 的文档(在Python 3中 称为http.client)中: 例外 :( 例外 :) 的子类。 在服务器响应我们不理解的HTTP状态代码时引发。 我运行了相同的代码,但未收到错误: 我想只是仔细检查所有内容,然后重试?

  • 问题内容: 当我从.py文件尝试此代码时,此代码有效,但在命令行解释器和Idle中失败。 我正在使用python 2.6 问题答案: 对于Python 3,它是一个函数而不是语句,因此,如果您使用的是Python 3,则需要在参数周围加上括号,如中所示。 但是,插入符号指向的位置比使用Python 3的位置早,因此您必须使用Python2.x。在这种情况下,错误是因为您要在交互式解释器中输入此内容

  • 问题内容: 为什么要编译Python脚本?您可以直接从.py文件运行它们,并且效果很好,那么在性能上有什么优势吗? 我还注意到,我的应用程序中的某些文件被编译为.pyc,而另一些则没有,为什么? 问题答案: 它被编译为字节码,可以更快,更快速地使用。 无法编译某些文件的原因是,每次运行脚本时都会重新编译与之一起调用的主脚本。所有导入的脚本将被编译并存储在磁盘上。 Ben Blank的 重要补充:

  • JSON“编码/解码”和JSON“编组/解编”之间有什么区别? 试图学习如何在golang中编写RESTFUL api,但不确定JSON“编码”和“编组”之间的区别是什么,或者它们是否相同?

  • 问题内容: 我在以下一行中得到一个: 我正在打印所有值: 输出: 那我为什么要得到呢?请帮助。谢谢。完整的堆栈跟踪如下: 问题答案: 简单的答案:您在该位置没有得到NullpointerException- 至少不是根据您发布的stacktrace。Liferay的LoginAction没有原始的StrutsAction。如果您使用的是6.2 GA5,则这是引发NullpointerExcepti

  • 问题内容: 为什么下面的代码抛出ConcurrentModificationException?JoshBloch可以避免ConcurrentModificationException。 问题答案: 使用“ for each”循环时,不能在列表上使用remove。相反,您可以使用此方法在迭代器上调用remove: 如果您实际上想用“ 200”代替每个值,或用其他值代替,则建立一个新列表可能更有意义