UnicodeDecodeError [Python]的原因和解决方法

2019年6月5日

当我尝试使用pandas读取csv文件格式的数据集时,我立即遇到错误“ UnicodeDecodeError:'utf-8'编解码器无法解码位置0的字节91x1:无效的起始字节”。

错误内容

使用pd.read_csv读取csv文件。然后 ...

将熊猫作为pd df = pd.read_csv('data.csv')导入

>> Unicode解码错误:'utf-8'编解码器无法解码位置0的字节91x1:无效的起始字节

我收到Unicode解码(将字符代码转换为字符)错误。
顺便说一下,将字符转换为字符代码称为编码。

原因

在个人计算机内部,不能原样识别字符,而是将其视为预先分配给每个字符的数字(字符代码)。

字符代码有多种类型,具体取决于语言和分配数字的方式。 UTF-8是将Unicode设置为世界标准的统一标准的一种编码方法,因此可以在任何语言中使用。
但是,UTF-8似乎也不完美(维基百科:日文环境中的Unicode问题

我不知道引起此问题的字符,但是由于csv文件包含日语字符,日语字符代码和UTF-8之间的转换不当会导致Unicode解码错误。

解决策

使用read_csv()进行读取时,请指定从参数到日语字符代码(shift_jis等)的编码格式。

df = pd.read_csv(“ data.csv”,编码=“ shift_jis”)

我能够成功阅读它。

其他日语兼容的编码格式

顺便说一句,有多种可以表达日语的字符代码,Python将以下代码作为标准实现。 (参考:Python标准编码列表 )

  • cp932
  • euc_jp,euc_jis_2004,euc_jisx0213
  • iso2022_jp,iso2022_jp_1,iso2022_jp_2,iso2022_jp_3
  • iso2022_jp_2004,iso2022_jp_2ext
  • shift_jis,shift_jis _2004,shift_jisx0213

但是,似乎可以使用shift_jis或cp932很好地读取它,这是一个主要措施。