gpt4 book ai didi

python - 如何在 Python 中处理不可解码的文件名?

转载 作者:太空狗 更新时间:2023-10-29 20:24:46 26 4
gpt4 key购买 nike

我真的很想让我的 Python 应用程序在内部专门处理 Unicode 字符串。这对我来说最近进展顺利,但我遇到了处理路径的问题。文件系统的 POSIX API 不是 Unicode,因此文件有可能(实际上有点常见)具有“不可解码”的名称:文件名未按照文件系统规定的编码进行编码。

在 Python 中,这表现为从 os.listdir() 返回的 unicodestr 对象的混合。

>>> os.listdir(u'/path/to/foo')
[u'bar', 'b\xe1z']

在该示例中,字符 '\xe1' 以 Latin-1 或类似格式编码,即使(假设的)文件系统报告 sys.getfilesystemencoding() == 'UTF- 8'(在 UTF-8 中,该字符将是两个字节 '\xc3\xa1')。出于这个原因,如果您尝试将 os.path.join() 与 Unicode 路径一起使用,您将到处都是 UnicodeError,因为无法解码文件名。

Python Unicode HOWTO提供有关 unicode 路径名的建议:

Note that in most occasions, the Unicode APIs should be used. The bytes APIs should only be used on systems where undecodable file names can be present, i.e. Unix systems.

因为我主要关心 Unix 系统,这是否意味着我应该重构我的程序以仅处理路径的字节串? (如果是这样,我怎样才能保持 Windows 兼容性?)或者有其他更好的方法来处理不可解码的文件名吗?它们“在野外”是否足够稀有,以至于我应该要求用户重命名他们该死的文件?

(如果最好只在内部处理字节串,我有一个后续问题:如何在 SQLite 中为一列存储字节串,同时将其余数据保持为友好的 Unicode 字符串?)

最佳答案

如果您愿意切换到 Python 3.1 或更高版本,Python 确实有解决问题的方法:

PEP 383 - Non-decodable Bytes in System Character Interfaces .

关于python - 如何在 Python 中处理不可解码的文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3409381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com