如何在 Anaconda (Python 3) 中使用 Spyder 解决此编码问题?

How to solve this encoding issue in with Spyder in Anaconda (Python 3)?

我正在尝试 运行 以下内容:

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

但是我收到以下错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 6987: ordinal not in range(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 提供的 Spyder 中时无效 (https://www.continuum.io/downloads)

你知道什么地方会出错吗?

我尝试 运行 这个程序,在顶部增加一行:

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

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

文本文件某处某行包含一些非 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"))]

(即使在默认情况下这样做也是个好主意)