gpt4 book ai didi

Python os.walk() 变音 u'\u0308'

转载 作者:太空宇宙 更新时间:2023-11-04 07:07:34 28 4
gpt4 key购买 nike

我在 OSX 机器上运行 Python 2.7。我正在尝试在 smb 共享上执行 os.walk。

for root, dirnames, filenames in os.walk("./test"):
for filename in filenames:

print filename

matchObj = re.match( r".*ö.*",filename,re.UNICODE)

如果我使用上面的代码,只要文件名不包含变音符号,它就可以工作。在我的 shell 中,变音符号打印得很好,但是当我将它们复制回 utf8 格式的 Textdeditor(在我的例子中是 Sublime)时,我得到:

screenshot预期:

filename.jpeg
filename_ö.jpg

当然正则表达式失败了。如果我像这样硬编码文件名:

re.match( r".*ö.*",'filename_ö',re.UNICODE)

它工作正常。

我试过:

os.walk(u"./test")
filename.decode('utf8')

但给了我:

return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0308' in position 10: ordinal not in range(128)

u'\u0308' 是元音符号上方的点。

我猜我忽略了一些愚蠢的事情?

最佳答案

Unicode字符可以用多种形式表示;有“ö”,但也有可能使用“o”和单独的组合变音符号来表示相同的字符。 OS X 通常更喜欢分隔的变体,而您的编辑器似乎没有很好地处理它,这两个单独的字符也不匹配您的正则表达式。

如果您特别需要一种或另一种方式,则需要规范化您的 Unicode 数据。参见 unicodedata.normalize .您需要 NFC 规范化形式。

关于Python os.walk() 变音 u'\u0308',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33647067/

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