文件名中允许的字符

时间:2011-01-27 08:15:07

标签: special-characters filenames

在哪里可以找到文件名中允许的字符列表,具体取决于操作系统? (例如,在Linux上,文件名中允许使用字符:,但在Windows上不允许)

6 个答案:

答案 0 :(得分:83)

您可以从Wikipedia Filename页面开始。它有一个相当不错的表(Comparison of filename limitations)列出了很多文件系统的保留字符。

除了MS-DOS下的CON之类的保留文件名本身。我记得当我将const.h中的包含文件缩短到con.h并且花了半个小时来弄清楚编译器挂起的原因时,我被它咬了一次。结果显示DOS被忽略的设备扩展,以便con.h与输出控制台con完全相同(当然,编译器正在等待我输入它之前的头文件会继续)。

答案 1 :(得分:19)

在Windows操作系统上创建一个文件,并在文件名中为其指定无效字符\。因此,您将获得一个包含文件名中所有无效字符的弹出窗口。

enter image description here

答案 2 :(得分:16)

好的,如果您只关心主要播放器文件系统,请查看Comparison of file systems

  • Windows(FAT32,NTFS):除NUL\/:*",{之外的任何Unicode {1}},<>
  • Mac(HFS,HFS +):除|:
  • 以外的任何有效Unicode
  • Linux(ext [2-4]):除/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