Python3相当于Python2遇到UnicodeDecodeErrors时打开

Python3 equivalent to Python2 open when encountering UnicodeDecodeErrors

我有一个脚本正试图从 python2 移植到 python3。

我确实通读了移植文档,https://docs.python.org/3/howto/pyporting.html

我原来的 python2 脚本使用了 open('filename.txt)。在移植到 python3 时,我将其更新为 io.open('filename.txt')。现在,当 运行 脚本作为 python2 或 python3 使用相同的输入文件时,我会收到一些错误,例如 UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 in position 793: invalid start byte.

python2 open 的错误检查是否没有 io.open 严格,或者它使用不同的默认编码? python3 是否有等效的方法来调用 io.open 以匹配 open 中内置的 python2?

目前我已经开始使用有效的 f = io.open('filename.txt', mode='r', errors='replace')。并将输出与原始 python2 版本进行比较,没有重要数据因替换错误而丢失。

首先,io.openopen;没有必要直接停止使用 open

问题是您对 open 的调用是 假设 文件是 UTF-8 编码的,而实际上不是。您必须明确提供正确的编码。

open('filename.txt', encoding='iso-8859')  # for example

(请注意,默认编码为 platform-specific,但您的错误表明您实际上默认为 UTF-8。)

在Python 2中,没有尝试解码non-ASCII个文件;从文件读取返回一个 str 值,该值由实际存储在文件中的任何字节组成。

这是 Python 3 中整体转变的一部分,从使用旧的 str 类型有时是文本,有时是字节,到使用 str 专门用于 Unicode 文本和 bytes 用于文本的任何特定编码。