【问题标题】:How to solve this encoding issue in with Spyder in Anaconda (Python 3)?如何在 Anaconda (Python 3) 中使用 Spyder 解决此编码问题?
【发布时间】:2016-11-05 10:12:38
【问题描述】:

我正在尝试运行以下命令:

import json
path = 'ch02/usagov_bitly_data2012-03-16-1331923249.txt' 
records = [json.loads(line) for line in open(path)]

但我收到以下错误:

UnicodeDecodeError: 'ascii' 编解码器无法在位置解码字节 0xe2 6987: 序数不在范围内(128)

从网上我发现应该是因为编码需要设置为utf-8,但我的问题是它已经在utf-8中了。

sys.getdefaultencoding() 
Out[43]: 'utf-8'

另外,看起来我的文件是 utf-8 格式,所以我真的很困惑 此外,以下代码有效:

In [15]: path = 'ch02/usagov_bitly_data2012-03-16-1331923249.txt'
In [16]: open(path).readline()

有没有办法解决这个问题?

谢谢!

编辑:

当我在控制台中运行代码时它可以工作,但当我在 Anaconda (https://www.continuum.io/downloads) 提供的 Spyder 中运行它时就不行了

你知道会出什么问题吗?

【问题讨论】:

    标签: python python-3.x encoding anaconda spyder


    【解决方案1】:

    文本文件在某处的某行包含一些非 ascii 字符。不知何故,在您的设置中,默认文件编码设置为 ascii 而不是 utf-8,因此请执行以下操作并明确指定文件的编码:

    import json
    path = 'ch02/usagov_bitly_data2012-03-16-1331923249.txt' 
    records = [json.loads(line.strip()) for line in open(path, encoding="utf-8"))]
    

    (即使默认设置有效,这样做也是个好主意)

    【讨论】:

      【解决方案2】:

      我尝试在顶部添加一行来运行这个程序:

      # -*- coding: utf-8 -*-
      

      它获取行并显示输出(带有 u' 前缀的字符串;之后可能需要进行转换)。但是,它并没有像你提到的那样抛出任何错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-09
        • 1970-01-01
        • 2012-09-15
        • 2019-08-01
        • 2020-03-12
        • 2020-08-24
        • 1970-01-01
        相关资源
        最近更新 更多