我有一个用 Python 2.7 编写的应用程序,它使用 os.walk 从硬盘驱动器读取用户文件。
该应用程序需要 UTF-8 系统语言环境(我们在启动之前检查 env 变量),因为我们处理带有 Unicode 字符的文件(例如,其中包含艺术家姓名的音频文件),并希望确保我们可以保存这些文件文件系统的正确文件名。
我们的一些用户有 UTF-8 语言环境(因此是 UTF-8 fs),但仍然设法将 ISO-8859-1 文件存储在他们的驱动器上。当我们的代码尝试 os.walk() 这些目录时,这会导致问题,因为 Python 在尝试使用 UTF-8 解码此 ISO-8859-1 字节序列时会抛出异常。
所以我的问题是,我如何让 python 忽略这个文件并继续下一个而不是中止整个os.walk()。我应该滚动自己的 os.walk() 函数吗?
编辑:到目前为止,我们一直在告诉我们的用户使用 convmv linux 命令来更正他们的文件名,但是许多用户有各种不同类型的编码(8859-1、8859-2 等),并且使用 convmv 需要用户在单独对每个文件运行 convmv 之前,对哪些文件具有什么编码进行有根据的猜测。