不幸的是,可接受的字符集因操作系统 和 文件系统而异。
- Windows:
* 当前代码页中的几乎所有字符都用作名称,包括Unipre字符和扩展字符集(128–255)中的字符,但以下各项除外: * 不允许使用以下保留字符:<>:“ / / |?*
* 不允许使用整数表示形式(介于0到31之间)的字符。
* 目标文件系统不允许的任何其他字符。
接受的字符列表可能会有所不同,具体取决于首先格式化文件系统的计算机的操作系统和语言环境。
.NET具有GetInvalidFileNameChars和GetInvalidPathChars,但是我不知道如何从Python调用它们。
- Mac OS:始终排除NUL,POSIX层排除“ /”,Apple API排除“:”
- HFS +:Unipre 2.0规范中UTF-16可以表示的任何非排除字符序列
- HFS:可以用MacRoman(默认)或其他编码表示的任何非排除字符序列,具体取决于创建文件系统的机器
- UFS:与HFS +相同
- Linux:
- 本机(类似UNIX的)文件系统:任何字节序列(不包括NUL和“ /”)
- FAT,NTFS,其他非本机文件系统:不同
最好的选择可能是在所有平台上都过于保守,或者只是尝试创建文件名并处理错误。



