Python:如何在Windows上与unicode文件名进行交互? (Python 2.7)

时间:2018-06-13 11:00:22

标签: python windows unicode ntfs

我的问题:

  
      
  1. 从美国Windows 10安装开始
  2.   
  3. 在Windows资源管理器中创建日语文件名
  4.   
  5. 打开Python shell,然后os.listdir('.')
  6.   
  7. 列出的文件名中充满了问号。
  8.   
  9. os.path.exists()毫不奇怪地报告找不到文件。
  10.   

NTFS将文件名存储为Unicode。我确定如果我使用win32api CreateFile()系列函数,我将获得 Unicode 文件名,但这些API太麻烦(而且不可移植)。我希望得到 utf-8 编码的文件名,或来自FS目录结构的Unicode字节,但在默认模式下,这似乎不会发生。

我尝试过使用setlocale(),但我没有偶然发现使我的程序正常工作的正确论据。我不想(也不能)在Windows机器上安装其他代码页。这需要使用Windows的库存安装。

请注意,这与控制台无关。一个repr()表明了?最终在os.listdir('.')列出的文件名中的字符是真正的问号而不是某些显示工件。我认为它们已被listdir()在引擎盖下使用的API添加。

1 个答案:

答案 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 ...

中的文件名列表