我在一个包含"ș“字符的文件中遇到了一些麻烦(这是UTF-8中的ș-拉丁文小写字母S,下面有逗号)。
我正在创建一个ș.txt文件,并试图用os.listdir()把它拿回来。不幸的是,os.listdir()返回它时s\xCC\xA6 (下面是“s”+组合逗号),而我的测试程序(下面)失败了。
这种情况发生在我的OS上,但它可以在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"发布于 2014-11-04 10:40:08
characters而不是它们的组合形式。您需要将文件名标准化为NFC组合规范化形式:
import unicodedata
files = [unicodedata.normalize('NFC', f) for f in os.listdir(u'.')]这会将文件名处理为unicode;否则需要首先将字节码解码为unicode。
还可以看到 function documentation。
https://stackoverflow.com/questions/26732985
复制相似问题