如何在 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"))]
(即使在默认情况下这样做也是个好主意)
我正在尝试 运行 以下内容:
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"))]
(即使在默认情况下这样做也是个好主意)