在哪里可以找到文件名中允许的字符列表,具体取决于操作系统?
(例如,在Linux上,文件名中允许使用字符:
,但在Windows上不允许)
答案 0 :(得分:83)
您可以从Wikipedia Filename页面开始。它有一个相当不错的表(Comparison of filename limitations)列出了很多文件系统的保留字符。
除了MS-DOS下的CON
之类的保留文件名本身。我记得当我将const.h
中的包含文件缩短到con.h
并且花了半个小时来弄清楚编译器挂起的原因时,我被它咬了一次。结果显示DOS被忽略的设备扩展,以便con.h
与输出控制台con
完全相同(当然,编译器正在等待我输入它之前的头文件会继续)。
答案 1 :(得分:19)
答案 2 :(得分:16)
好的,如果您只关心主要播放器文件系统,请查看Comparison of file systems:
NUL
,\
,/
,:
,*
,"
,{之外的任何Unicode {1}},<
,>
|
或:
/
或NUL
所有字节除/
,NUL
,\
,/
,:
,*
,"
,{ {1}},<
,您无法调用文件/文件夹>
或|
,也无法控制字符(当然)。
答案 3 :(得分:2)
为了更准确地了解Mac OS X(现在称为MacOS),Finder中的/
被解释为Unix文件系统中的:
。
当Apple从Classic Mac OS迁移时,这是为了向后兼容。
在Finder中的文件名中使用/
是合法的,查看终端中将显示:
的同一文件。
它的工作方式也相反:你不能在终端的文件名中使用/
,但:
可以,并显示为{{ 1}}在Finder中。
某些应用程序可能更具限制性,并且禁止这两个字符以避免混淆,或者因为它们保留了以前的经典Mac OS逻辑或平台之间的名称兼容性。
答案 4 :(得分:0)
对于“英语语言环境”文件名,这很好用。我正在用它来清理上传的文件名。该文件名并不意味着要链接到磁盘上的任何内容,它是用于文件下载时的,因此没有路径检查。
related_name
基本上,它会删除Windows和其他操作系统的所有不可打印和保留的字符。您可以轻松扩展该模式以支持其他语言环境和功能。
答案 5 :(得分:-1)
以下是在python中清理文件名的代码。
import unicodedata
def clean_name(name, replace_space_with=None):
"""
Remove invalid file name chars from the specified name
:param name: the file name
:param replace_space_with: if not none replace space with this string
:return: a valid name for Win/Mac/Linux
"""
# ref: https://en.wikipedia.org/wiki/Filename
# ref: https://stackoverflow.com/questions/4814040/allowed-characters-in-filename
# No control chars, no: /, \, ?, %, *, :, |, ", <, >
# remove control chars
name = ''.join(ch for ch in name if unicodedata.category(ch)[0] != 'C')
cleaned_name = re.sub(r'[/\\?%*:|"<>]', '', name)
if replace_space_with is not None:
return cleaned_name.replace(' ', replace_space_with)
return cleaned_name