我在使用包含“ş”字符的文件时遇到了一些麻烦(在UTF-8中为\xC8\x99
- 带有COMMA的LATIN SMALL LETTER S。)
我正在创建一个ș.txt
文件并尝试使用os.listdir()
将其恢复。不幸的是,os.listdir()
将其返回为s\xCC\xA6
(“s”+ COMBINING COMMA BELOW),我的测试程序(如下)失败。
这在我的OS X上发生,但它适用于Linux机器。知道究竟是什么导致了这种行为(两个环境都配置了LANG = en_US.UTF8)?
这是测试程序:
#coding: utf-8
import os
fname = "ș.txt"
with open(fname, "w") as f:
f.write("hi")
files = os.listdir(".")
print "fname: ", fname
print "files: ", files
if fname in files:
print "found"
else:
print "not found"
答案 0 :(得分:8)
OS X filesystem mostly uses decomposed characters而不是他们的组合形式。您需要将文件名规范化为NFC组合规范化形式:
import unicodedata
files = [unicodedata.normalize('NFC', f) for f in os.listdir(u'.')]
将文件名处理为unicode ;你需要先将字节串解码为unicode。