Windows 上的 Python Unicode 文件名\x01

标签 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 在 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/

相关文章:

python - 可以在网络应用程序中使用 Pika BlockingConnection 吗?

c++ - 关于转储 ram 方法的问题 [所有语言和平台]

python - WTForm : FieldList with SelectField, 如何渲染?

c++ - 如何在指定位置安装Qt?

windows - 如何使用 ExecDos 命令隐藏命令提示符窗口

windows - Perl 到 Linux 上的静态可执行文件

java - 处理 unicode �,如何摆脱?安卓/java

python - 使用 python Spark 将大型 CSV 发送到 Kafka

python - 如何使用 OptParse 检索具有非 ASCII 字符的字符串?

pdf - 在 unicode 中使用 xhtml2pdf 时遇到问题