UnicodeDecodeError:'ascii'编解码器无法解码位置7601中的字节0xc3:序号不在范围内(128)

问题描述:

我目前正在运行:Python 3.5.1 :: Anaconda 4.0.0(x86_64)。UnicodeDecodeError:'ascii'编解码器无法解码位置7601中的字节0xc3:序号不在范围内(128)

ERROR:UnicodeDecodeError错误: 'ASCII' 编解码器不能在7601位置解码字节0xc3:在范围内(128)

序数不运行时下面的代码我得到上述错误。当我保存并尝试从本地直接打开txt文件时,我遇到了同样的错误,但是,当我保存并运行重复项时,我缩短到约25行,按预期运行 - 任何指导都将非常感激。

import numpy as np 
import matplotlib.pyplot as pp 
import seaborn 
import urllib.request 


urllib.request.urlretrieve('ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/ghcnd-stations.txt','stations.txt') 

print(open('stations.txt','r').readlines()[:10]) 
+2

您是否检查过该文件使用了哪种编码?我确定NOAA在某处指定。然后在打开文件时使用该编码。 –

+0

另外,如果您只需要前10行,请不要先阅读整个文件;这是一个大文件。 '从itertools import islice',然后'lines = list(islice(openfileobj,10))'会给你一个打开的文件对象的前10行而不读剩下的。 –

+0

只打印前10行,看它是否正常工作,因为它是一个大文件。 –

不幸的是,documentation for that directory没有规定使用何种编解码器中的文件,所以我打开二进制模式的文件,而不是发现,造成“进攻”的字节数。

数据编码为UTF-8;在“违规”字节你遇到拼写出的Espanola:

>>> line 
b'US1NMRA0022 36.0456 -106.1517 1955.0 NM ESPA\xc3\xb1OLA 5.4 WNW       \n' 
>>> line.decode('utf8') 
'US1NMRA0022 36.0456 -106.1517 1955.0 NM ESPAñOLA 5.4 WNW       \n' 

这是文件中的第六万三千八百十五行,如果你很好奇,这就是为什么你没有看到这个问题,当您截断该文件。

打开与该编解码器文件:

open('stations.txt', 'r', encoding='utf8') 

不要依赖于默认的,这取决于您的区域设置(这很容易从环境不同环境)。

+0

工作完美,需要添加编码层! –