Python/JSON : How to Resolve UnicodeDecodeError

标签 python json

我最近一直在尝试学习Python,并按照这本书进行学习, Python for Data Analysis 并将 Python 2.7 与 Canopy 结合使用。在书中,他们提供了一些链接raw data我保存并分配给 path 变量。尝试使用 JSON 将文本文件转换为字典列表后:

records = [json.loads(line) for line in open(path)]

我收到以下错误:

---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-17-b1e0b494454a> in <module>()
----> 1 records = [json.loads(line) for line in open(path)]

C:\Users\Marc\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.4.1.1975.win-    x86_64\lib\json\__init__.pyc in loads(s, encoding, cls, object_hook, parse_float, parse_int,     parse_constant, object_pairs_hook, **kw)
    336             parse_int is None and parse_float is None and
    337             parse_constant is None and object_pairs_hook is None and not kw):
--> 338         return _default_decoder.decode(s)
    339     if cls is None:
    340         cls = JSONDecoder

C:\Users\Marc\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.4.1.1975.win-    x86_64\lib\json\decoder.pyc in decode(self, s, _w)
    363 
    364         """
--> 365         obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    366         end = _w(s, end).end()
    367         if end != len(s):

C:\Users\Marc\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.4.1.1975.win-x86_64\lib\json\decoder.pyc in raw_decode(self, s, idx)
    379         """
    380         try:
--> 381             obj, end = self.scan_once(s, idx)
    382         except StopIteration:
    383             raise ValueError("No JSON object could be decoded")

UnicodeDecodeError: 'utf8' codec can't decode byte 0x92 in position 6: invalid start byte 

奇怪的是,这在另一台计算机上运行,​​我认为它使用的是相同版本的 Python。提前致谢。

最佳答案

相关数据包含一个 U+2019 RIGHT SINGLE QUOTATION MARK字符,编码为 UTF-8。但是您使用复制粘贴来保存数据,而不是将文本直接保存到磁盘。

在此过程中,数据会被解码,然后再次编码为 Windows 代码页 1252:

>>> u'\u2019'.encode('cp1252')
'\x92'

换句话说,您的数据文件不相同。它可能包含相同的数据,但使用不同的编码。

JSON 标准规定数据需要为 encoded to UTF-8, UTF-16 or UTF-32 ,UTF-8 是默认值,如果您不给它编码,Python json 模块将使用它。因为您正在向其提供 CP-1252 数据,所以解码失败。

关于Python/JSON : How to Resolve UnicodeDecodeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26316531/

相关文章:

python - 我收到 AttributeError : 'module' object has no attribute 'fork' when i run my program on windows. 我该如何解决这个问题?

python - 在 LSTM 层之前具有嵌入层的 Keras LSTM

json - 如何从 JSON 选择元素 - Angular 2

java - 如何在JAVA中从字符串(字符数组)中提取键值

javascript - JS 中减去 2 个日期

json - 在 json 文件中,我得到了非法的转义序列

python - 在 PySide 主窗口左侧添加工具栏

python - Instagram 私有(private) API 403,即使有 cookie 和 header

python - Django + Apache + Windows WSGIDaemonProcess 替代方案

javascript - 将 json 文件附加到带有条件的 html