【发布时间】: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 应该是一个完美的代码点,如果无法打印的话。维基百科在这里完全错了吗?
【问题讨论】: