Python的glob模块和unix的find命令不识别非ascii

Lif*_*thy 5 python unix encoding

我在Mac OS X 10.8.2上

当我尝试查找文件名包含非ASCII字符的文件时,虽然我确信它们已存在,但我没有得到任何结果.以控制台输入为例

> find */Bärlauch*
Run Code Online (Sandbox Code Playgroud)

我没有结果.但如果我尝试没有变形金刚,我会得到

> find */B*rlauch*
images/Bärlauch1.JPG
Run Code Online (Sandbox Code Playgroud)

所以该文件肯定存在.如果我重命名用'ae'替换'ä'的文件,则找到该文件.

类似地,Python模块glob无法找到该文件:

>>> glob.glob('*/B*rlauch*')
['images/Bärlauch1.JPG']
>>> glob.glob('*/Bärlauch*')
[]
Run Code Online (Sandbox Code Playgroud)

我发现它必须与编码有关但我的终端设置为utf-8而我使用的是使用unicode字符串的Python 3.3.0.

Mar*_*ers 8

Mac OS X 始终对HFS +上的文件名使用非规范化字符.用于unicodedata.normalize('NFD', pattern)对glob模式进行非规范化.

import unicodedata

glob.glob(unicodedata.normalize('NFD', '*/Bärlauch*'))
Run Code Online (Sandbox Code Playgroud)