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.
Mac OS X 始终对HFS +上的文件名使用非规范化字符.用于unicodedata.normalize('NFD', pattern)对glob模式进行非规范化.
import unicodedata
glob.glob(unicodedata.normalize('NFD', '*/Bärlauch*'))
Run Code Online (Sandbox Code Playgroud)