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

read a file and try to remove all non UTF-8 chars

我正在尝试读取文件并将字符串转换为 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字符,那么如何删除它们呢?

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

您可能 想要将编码添加到 open() 调用以使其明确。否则 Python 使用系统默认值,这可能不是 UTF-8:

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

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

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

如果你使用

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

,那么 non-UTF-8 个字符将被忽略。阅读 open() function documentation 了解详情。该文档有一节介绍了 errors 参数的可能值。