我的问题:
- 从美国Windows 10安装开始
- 在Windows资源管理器中创建日语文件名
- 打开Python shell,然后
os.listdir('.')
- 列出的文件名中充满了问号。
- 醇>
os.path.exists()
毫不奇怪地报告找不到文件。
NTFS将文件名存储为Unicode。我确定如果我使用win32api CreateFile()
系列函数,我将获得 Unicode 文件名,但这些API太麻烦(而且不可移植)。我希望得到 utf-8 编码的文件名,或来自FS目录结构的Unicode字节,但在默认模式下,这似乎不会发生。
我尝试过使用setlocale()
,但我没有偶然发现使我的程序正常工作的正确论据。我不想(也不能)在Windows机器上安装其他代码页。这需要使用Windows的库存安装。
请注意,这与控制台无关。一个repr()表明了?最终在os.listdir('.')
列出的文件名中的字符是真正的问号而不是某些显示工件。我认为它们已被listdir()
在引擎盖下使用的API添加。
答案 0 :(得分:1)
在使用?
在控制台中显示该文件名时,您可能会获得os.listdir()
,但您可以访问该文件名而不会出现任何问题,因为内部所有内容都以二进制形式存储。如果你试图复制文件名并直接在python中粘贴它,它将被解释为仅仅是问号......
如果要打开该文件并执行任何操作,请查看此...
files = os.listdir(".")
# Possible output:
# ["a.txt", "file.py", ..., "??.html"]
filename = files[-1] # The last file in this case
f = open(filename, 'r')
# Sample file operation
lines = f.readlines()
print(lines)
f.close()
修改强>
在Python 2中,您需要将当前路径作为Unicode传递,可以使用os.listdir(u'.')
来完成,其中.
表示当前路径。这将返回Unicode ...