【发布时间】:2020-09-01 15:47:06
【问题描述】:
我在 S3 中有一个存储桶,其中包含一个 csv。
其中没有非 ASCII 字符。
当我尝试使用 python 阅读它时,它不会让我。
我用过:df = self.s3_input_bucket.get_file_contents_from_s3(path)
正如我最近在同一个脚本中多次使用的那样,并得到:
UnicodeDecodeError: 'utf8' codec can't decode byte 0x84 in position 14: invalid start byte.
为了确保它进入正确的路径,我将另一个纯文本文件放在同一个文件夹中,并且能够毫无问题地读取它。
我尝试了许多在其他问题上找到的解决方案。只是一个例子,我看到有人提供了一个解决方案,可以试试这个:
str = unicode(str, errors='replace')
或
str = unicode(str, errors='ignore')
来自这个问题:UnicodeDecodeError: 'utf8' codec can't decode byte 0x9c
但在这种情况下我该如何使用它们?
这不起作用:
str = unicode(self.s3_input_bucket.get_file_contents_from_s3(path), errors='replace')
【问题讨论】:
-
文件未使用 UTF-8 编码。您需要告诉 S3 库使用不同的编解码器。你用的是哪个库?在 PyPI 上搜索“AWS S3”会返回多个匹配项。
-
这是 CSV 格式的众多弱点之一。与所有文本文件一样,您必须使用编写它的字符编码来阅读它。如果您不知道它是哪个,则说明通信失败。你能问作者或参考文档或查看 HTTP 标头,...?