Unk*_*own 2 python linux macos utf-8
我对包含"ş"字符的文件有一点麻烦(这是\xC8\x99UTF-8 - 带有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"
Run Code Online (Sandbox Code Playgroud)
在OS X文件系统大多采用分解的字符,而不是他们的相结合的形式.您需要将文件名规范化为NFC组合规范化形式:
import unicodedata
files = [unicodedata.normalize('NFC', f) for f in os.listdir(u'.')]
Run Code Online (Sandbox Code Playgroud)
这会将文件名作为unicode处理; 你需要先将字节串解码为unicode.
另请参阅unicodedata.normalize()功能文档.
| 归档时间: |
|
| 查看次数: |
4314 次 |
| 最近记录: |