首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UTF-8和os.listdir()

UTF-8和os.listdir()
EN

Stack Overflow用户
提问于 2014-11-04 10:36:26
回答 1查看 6.4K关注 0票数 2

我在一个包含"ș“字符的文件中遇到了一些麻烦(这是UTF-8中的ș-拉丁文小写字母S,下面有逗号)。

我正在创建一个ș.txt文件,并试图用os.listdir()把它拿回来。不幸的是,os.listdir()返回它时s\xCC\xA6 (下面是“s”+组合逗号),而我的测试程序(下面)失败了。

这种情况发生在我的OS上,但它可以在Linux机器上工作。知道到底是什么导致了这种行为(这两个环境都配置了LANG=en_US.UTF8)吗?

下面是测试程序:

代码语言:javascript
复制
#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"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-04 10:40:08

characters而不是它们的组合形式。您需要将文件名标准化为NFC组合规范化形式:

代码语言:javascript
复制
import unicodedata
files = [unicodedata.normalize('NFC', f) for f in os.listdir(u'.')]

这会将文件名处理为unicode;否则需要首先将字节码解码为unicode。

还可以看到 function documentation

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26732985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档