【问题标题】:UnicodeDecodeError: 'ascii' codec can't decode byte with reading CSVUnicodeDecodeError:“ascii”编解码器无法通过读取 CSV 来解码字节
【发布时间】:2017-01-16 13:59:09
【问题描述】:

尝试从 CSV 文件中读取数据并将数据写入 XML 文件。我遇到了:

UnicodeDecodeError: 'ascii' codec can't decode byte 0x8a in position 87: ordinal not in range(128)

我的问题是,忽略这种错误并继续处理数据集的最佳方法是什么。在阅读了其他类似的问题后,我确实在我的文件中添加了:# -*- coding: utf-8 -*-,但它没有帮助

【问题讨论】:

  • 正确解码输入,例如读取为字节,然后执行input.decode("utf-8")(如果您的输入是 utf-8)。

标签: python xml python-2.7 csv ascii


【解决方案1】:

我在阅读 setup.py 中的自述广告详细说明时遇到此错误。如果你使用open,可以使用编码参数:

with open("README.md", "r", encoding='utf_8') as f:
    long_description = f.read()

【讨论】:

  • 集成python 2.7 open没有编码参数。
【解决方案2】:

您可以尝试使用编解码器打开 csv:

import codecs
codecs.open(file_name, 'r', 'utf8')

鉴于每行都包含 '\n' 字符串,您需要在循环槽线时应用 line.rstrip()

注意:请不要尝试将值转换为 str,因为您会在那里遇到另一个错误。

【讨论】:

  • 谢谢@Boris,去试试你的建议
  • 请阅读编辑,'\n' 不止一次让我头疼 :)
  • 这就是我目前的阅读方式:使用 open('myFile.csv', 'rb') as ifile: reader = csv.reader(ifile) for rownum, row in enumerate(reader ):
  • 您可以按照我在回答中的建议,首先用 codecs.open 替换您的 with 语句中的 open。然后在迭代的第一行使用 for rownum, row in enumerate(ifile): row = row.rstrip() 它应该替换你的 csv.reader() 方法。
猜你喜欢
  • 1970-01-01
  • 2013-08-20
  • 2014-04-09
  • 2018-08-02
  • 2013-09-23
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多