gpt4 book ai didi

python - 如何将路径转换为 ​​Mac OS X 路径,几乎是 NFD 范式?

转载 作者:太空狗 更新时间:2023-10-29 21:50:14 31 4
gpt4 key购买 nike

Mac 通常在标准化路径的 HFS+ 文件系统上运行。也就是说,例如,如果您保存一个带有重音符号 é 的文件 (u'\xe9'),然后执行 os.listdir,您将看到文件名已转换为 u'e\u0301'。这是 the Python unicodedata module 的正常 unicode NFD 规范化可以处理。不幸的是,HFS+ 与 NFD 不完全一致,这意味着某些路径不会被规范化,例如福 (u'\ufa1b') 不会被更改,尽管它的 NFD 形式是 u'\u798f'.

那么,如何在 Python 中进行规范化呢?只要我可以从 Python 调用它们,我就可以使用 native API。

最佳答案

好吧,决定写出 Python 解决方案,因为我指出的相关其他问题更像是 Objective-C。

首先你需要安装https://pypi.python.org/pypi/pyobjc-corehttps://pypi.python.org/pypi/pyobjc-framework-Cocoa .然后以下应该工作:

import sys

from Foundation import NSString, NSAutoreleasePool

def fs_normalize(path):
_pool = NSAutoreleasePool.alloc().init()
normalized_path = NSString.fileSystemRepresentation(path)
upath = unicode(normalized_path, sys.getfilesystemencoding() or 'utf8')
return upath

if __name__ == '__main__':
e = u'\xe9'
j = u'\ufa1b'
e_expected = u'e\u0301'

assert fs_normalize(e) == e_expected
assert fs_normalize(j) == j

请注意 NSString.fileSystemRepresentation() 似乎也接受 str 输入。在某些情况下,我遇到过它返回垃圾的情况,所以我认为将它与 unicode 一起使用会更安全。它总是返回 str 类型,因此您需要转换回 unicode。

关于python - 如何将路径转换为 ​​Mac OS X 路径,几乎是 NFD 范式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18137554/

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