我有一个 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 在 NTFS 磁盘上使用上面的最小脚本在 Windows 机器上本地重现 CI 故障。这些都没有帮助:
- 在开头添加
# -*- coding: utf-8 -*-
- 在命令之前运行
chcp 65001
- 使用 Unicode 前缀 (
u"\x01"
)
根据 Wikipedia , NTFS至少要支持
In Win32 namespace: any UTF-16 code unit (case-insensitive) except /:*"?<>| as well as NUL
这可能是什么原因造成的? U+0001
应该是一个完美的代码点,如果不可打印的话。维基百科在这里完全错了吗?
最佳答案
在 Windows 中,NTFS 文件名不能包含 ASCII 控制字符 0x01 - 0x1F。参见 Naming Files, Paths, and Namespaces .此规则适用于 Microsoft 的所有文件系统,但不一定适用于第三方文件系统。例如,VirtualBox 共享文件夹文件系统允许在文件名中使用控制字符、冒号和管道符。
关于Windows 上的 Python Unicode 文件名\x01,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56119090/