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])
答
不幸的是,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
工作完美,需要添加编码层! –
您是否检查过该文件使用了哪种编码?我确定NOAA在某处指定。然后在打开文件时使用该编码。 –
另外,如果您只需要前10行,请不要先阅读整个文件;这是一个大文件。 '从itertools import islice',然后'lines = list(islice(openfileobj,10))'会给你一个打开的文件对象的前10行而不读剩下的。 –
只打印前10行,看它是否正常工作,因为它是一个大文件。 –