【问题标题】:Python Unicode filename \x01 on WindowsWindows 上的 Python Unicode 文件名 \x01
【发布时间】:2019-09-30 19:29:27
【问题描述】:

我有一个 Python 脚本,它生成一堆具有各种 Unicode 文件名的文件,用于测试目的。它适用于 OS X 和 Linux 环境。在 Windows(更重要的是 AppVeyor)上,它无法创建一些文件,抱怨文件名无效。这是一个非常小的版本:

with open("\x01", "w") as f:
  f.write("foo")

我得到的错误是:

Traceback (most recent call last):
  File "genTestRes.py", line 51, in <module>
    os.mkdir(os.path.join(TESTDIR, data))
OSError: [WinError 123] The filename, directory name, or volume label syntax is incorrect: 'test-res\\\x01'

我可以使用上面的最小脚本,在 NTFS 磁盘上,使用 Python 2.7 在 Windows 机器上本地重现 CI 故障。这些都没有帮助:

  • 在开头添加# -*- coding: utf-8 -*-
  • 在命令前运行chcp 65001
  • 使用 Unicode 前缀 (u"\x01")

根据Wikipedia,NTFS至少应该支持

在 Win32 命名空间中:任何 UTF-16 代码单元(不区分大小写),除了 /:*"?| 以及 NUL

这可能是什么原因造成的? U+0001 应该是一个完美的代码点,如果无法打印的话。维基百科在这里完全错了吗?

【问题讨论】:

    标签: python windows unicode


    【解决方案1】:

    在 Windows 中,NTFS 文件名不能包含 ASCII 控制字符 0x01 - 0x1F。见Naming Files, Paths, and Namespaces。此规则适用于 Microsoft 的所有文件系统,但不一定适用于第三方文件系统。例如,VirtualBox 共享文件夹文件系统允许文件名中包含控制字符、冒号和管道。

    【讨论】:

      猜你喜欢
      • 2016-02-24
      • 1970-01-01
      • 1970-01-01
      • 2015-08-07
      • 2023-04-05
      • 1970-01-01
      • 2013-06-30
      • 2013-09-01
      • 2023-03-11
      相关资源
      最近更新 更多