Windows上的Python Unicode文件名\ x01

时间:2019-05-13 19:55:49

标签: python windows unicode

我有一个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'

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

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

根据Wikipedia,NTFS应该至少支持

  

在Win32名称空间中:// *“?<> |以及NUL之外的任何UTF-16代码单元(不区分大小写)

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

1 个答案:

答案 0 :(得分:2)

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