[英]UTF-8 and os.listdir()
我在使用包含“ş”字符的文件时遇到了一些麻烦(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"
OS X文件系统主要使用分解的字符而不是它们的组合形式。 您需要将文件名规范化为NFC组合规范化形式:
import unicodedata
files = [unicodedata.normalize('NFC', f) for f in os.listdir(u'.')]
这会将文件名作为unicode处理; 你需要先将字节串解码为unicode。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.