我在处理包含“ş”字符的文件时遇到了一些麻烦(即\xC8\x99
采用 UTF-8 - 拉丁文小写字母 S,下面带逗号)。
我正在创建一个ș.txt
文件并尝试将其恢复os.listdir()
。很遗憾,os.listdir()
将其返回为s\xCC\xA6
(“s”+下面的组合逗号)和我的测试程序(如下)失败。
这发生在我的 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"
The OS X 文件系统主要使用分解的人物而不是它们的组合形式。您需要将文件名标准化回 NFC 组合标准化形式:
import unicodedata
files = [unicodedata.normalize('NFC', f) for f in os.listdir(u'.')]
这处理文件名作为统一码;否则,您需要先将字节串解码为 unicode。
另请参阅unicodedata.normalize()功能文档.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)