如何用Anaconda(Python 3)中的Spyder解决这个编码问题?

时间:2016-11-05 10:12:39

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

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

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中运行它时

你知道什么可能出错吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

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