我有一个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
u"\x01"
)根据Wikipedia,NTFS应该至少支持
在Win32名称空间中:// *“?<> |以及NUL之外的任何UTF-16代码单元(不区分大小写)
可能是什么原因造成的? U+0001
应该是完美的代码点,即使无法打印。维基百科在这里真的错了吗?
答案 0 :(得分:2)
在Windows中,NTFS文件名不能包含ASCII控制字符0x01-0x1F。参见Naming Files, Paths, and Namespaces。该规则适用于Microsoft的所有文件系统,但不一定适用于第三方文件系统。例如,VirtualBox共享文件夹文件系统允许在文件名中使用控制字符,冒号和管道。