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

dai*_*yue 0 python decode utf-8 python-3.x

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

file_str = open(file_path, 'r').read()
file_str = file_str.decode('utf-8')
Run Code Online (Sandbox Code Playgroud)

但我得到以下错误,

AttributeError: 'str' object has no attribute 'decode'
Run Code Online (Sandbox Code Playgroud)

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

file_str = open(file_path, 'r', encoding='utf-8').read()
Run Code Online (Sandbox Code Playgroud)

但它没有消除非utf-8字符,所以如何删除它们?

Mar*_*ers 5

删除.decode('utf8')电话.您的文件数据已经被解码,因为在Python 3中的open()文本模式(默认)调用返回的解码数据到Unicode字符串一个文件对象给你.

您可能确实希望将编码添加到open()调用中以使其显式化.否则Python使用系统默认值,可能不是UTF-8:

file_str = open(file_path, 'r', encoding='utf8').read()
Run Code Online (Sandbox Code Playgroud)

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

有关详细信息,请参阅open()功能文档.

  • 这仅读取 UTF-8 编码的文件。OP 要求一种在读取包含一些脏字符的文件时忽略非 UTF-8 字符的方法。当读取脏字符时,此答案会导致“UnicodeDecodeError:'utf-8'编解码器无法解码位置 80189 中的字节 0xc9:无效的连续字节”。 (2认同)