os.walk返回不同编码的非ASCII(unicode)文件名,如何处理?

早期的

在Mac OsX和CentOS 7上运行的代码完全相同,返回的结果不同:

>>> path = u'examples'
>>> import os
>>> walker = os.walk(path, followlinks=True)
>>> list(walker)

在CentOS上:

[u'filename-with-un\xec\u010d\xf8\u0111e-chars.txt', ... ]

在MacOSX上:

[u'filename-with-uni\u0300c\u030c\xf8\u0111e-chars.txt', ... ]

顺便说一句,实际的文件名是 filename-with-unìčøđe-chars.txt

是什么导致了这种行为,我们如何避免呢?

施伦克

此行为是由OS X和Cent OS上文件名的不同Unicode规范化形式引起的。

unicode.org技术报告#15定义了可用的表格,但是Apple对HFS +使用了一些细微的变体,如此处所述

因此,在一种情况下,您在OS X / HFS +上具有NFD,在另一种情况下,您具有用于Linux的NFC(如果很高兴您的文件系统编码完全是针对Linux定义的,但并非总是如此,请参阅惠勒(Wheeler)解决了您可能会发现的许多问题)。

因此,从根本上讲,您无法避免这种行为,即这样做的本机文件系统。

但是,如果您提出不同的要求,则可能会得到更令人满意的答案。您可以通过有意义的方式比较名称,方法是将其标准化为通用的标准化形式等,具体取决于您为什么需要比较它们。Python在unicodedata模块中提供具有该normalize()功能的规范化功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python 3 OS Walk Unicode异常

来自分类Dev

os.walk()没有选择我的文件名

来自分类Dev

Os X Yosemite Qt拖放文件名错误

来自分类Dev

如何处理OS X Yosemite Core标头中的非gcc兼容代码

来自分类Dev

Python为os.listdir返回的文件名提供FileNotFoundError

来自分类Dev

使用os.walk过滤文件扩展名,但文件名受到限制

来自分类Dev

OS X上的Git'文件名太长'错误

来自分类Dev

Python使用os.path lib获取文件名

来自分类Dev

如何从os.walk中排除文件扩展名

来自分类Dev

os.walk出现非ascii文件名问题

来自分类Dev

未处理stopIteration的os.walk错误

来自分类Dev

os.listdir返回带有特殊字符的文件名的奇怪字符串

来自分类Dev

Os.system()-更改zip命令以为各种日期时间提供不同的文件名

来自分类Dev

KVM / QEMU和来宾OS如何处理页面错误

来自分类Dev

如何使用os.walk查找文件的路径?

来自分类Dev

Mac OS库文件名中“ .1”,“ @”和“ *”的含义

来自分类Dev

如何处理Linux OS microSD映像文件?

来自分类Dev

当文件名较长时,Python的os.walk()在Windows中失败

来自分类Dev

在os.walk中排除包含文件名的python列表

来自分类Dev

OS X:如何从时间戳更改文件名

来自分类Dev

os.walk()没有选择我的文件名

来自分类Dev

PhoneGap如何处理新的OS版本?

来自分类Dev

OS X下文件名的无效字符是什么?

来自分类Dev

使用os.walk过滤文件扩展名,但文件名受限制

来自分类Dev

未处理stopIteration的os.walk错误

来自分类Dev

在OS X上将文件名解析为touch命令

来自分类Dev

如何使用os.walk()重命名文件?

来自分类Dev

Python os.walk,处理子目录中的文件

来自分类Dev

使用 os.("start ...) 和变量文件名。python

Related 相关文章

热门标签

归档