读取文件并尝试删除所有非UTF-8字符

时间:2016-04-05 14:34:06

标签: python python-3.x utf-8 decode

我正在尝试读取文件并将字符串转换为UTF-8字符串,以便删除文件字符串中的一些非utf-8个字符,

file_str = open(file_path, 'r').read()
file_str = file_str.decode('utf-8')

但是我收到了以下错误,

AttributeError: 'str' object has no attribute 'decode'

更新:我按照答案的建议尝试了代码,

file_str = open(file_path, 'r', encoding='utf-8').read()

但它没有消除非utf-8字符,那么如何删除它们呢?

2 个答案:

答案 0 :(得分:5)

删除.decode('utf8')电话。您的文件数据已经已被解码,因为在Python 3中,open()调用文本模式(默认值)返回了一个文件对象,它将数据解码为Unicode字符串为您< / em>的

你可能想要将编码添加到open()调用中以使其显式化。否则Python使用系统默认值,可能不是UTF-8:

file_str = open(file_path, 'r', encoding='utf8').read()

例如,在Windows上,默认编解码器几乎肯定会出现UTF-8数据错误,但在尝试阅读文本之前,您不会看到问题。你发现你有一个Mojibake因为UTF-8数据是用CP1252或类似的8位编解码器解码的。

有关详细信息,请参阅open() function documentation

答案 1 :(得分:0)

如果您使用

file_str = open(file_path, 'r', encoding='utf8', errors='ignore').read()

,则基本上将忽略非UTF-8字符。有关详细信息,请阅读open() function documentation。文档中有一节介绍errors参数的可能值。