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

Python: How do I interact with unicode filenames on Windows? (Python 2.7)

我的问题:

  1. Start with US Windows 10 install
  2. Create a Japanese filename in Windows explorer
  3. Open the Python shell, and os.listdir('.')
  4. The listed filename is full of question marks.
  5. os.path.exists() unsurprisingly reports file not found.

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

我试过 setlocale(),但我还没有找到使我的程序运行的正确参数。我不想(也不能)在 Windows 机器上安装额外的代码页。这需要与 Windows.

的库存安装一起使用

请注意这与控制台无关。一个 repr() 表明 ?在 os.listdir('.') 列出的文件名中结束的字符是真正的问号,而不是一些显示工件。我假设它们是由 listdir() 在幕后使用的 API 添加的。

在控制台中使用 os.listdir() 显示该文件名时,您可能会收到 ?s,但您可以毫无问题地访问该文件名,因为内部所有内容都以二进制形式存储。如果您试图复制文件名并将其直接粘贴到 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'.'),其中 . 表示当前路径。这将 return Unicode 文件名列表...