【问题标题】:How to get a file in Windows with a colon in the filename?如何在 Windows 中获取文件名中带有冒号的文件?
【发布时间】:2012-04-30 15:35:33
【问题描述】:

我收到来自上传文件名中带有冒号的文件的客户的错误,即C:/uploads/test : doc.html

我假设某些 Unix 或 Linux 系统正在生成该文件,但我不确定用户如何使用无效的文件名保存它们。我编写了一段代码,应该在上传时重命名文档。我的问题是我无法测试它,因为我无法在 Windows 上获取文件名中有冒号的文件。

【问题讨论】:

  • Windows 文件名中有一些字符是不允许的,冒号就是其中之一。对不起。
  • P.S.无效字符的完整列表在这里:msdn.microsoft.com/en-us/library/windows/desktop/…
  • 可以使用本机 API 或从设备驱动程序执行此操作。但是您将无法从 Windows 应用程序上传文件,或者确实无法对它执行任何其他操作。
  • 我经常在文件名中使用全角冒号。这是一个 Unicode 字符,看起来非常像冒号,所以我在 Windows 不允许使用常用冒号的地方使用它。它在视觉上被您无法删除的空间包围。我很久以前偶然发现它,现在我只需要在需要时复制并粘贴它。

标签: windows unix filenames colon


【解决方案1】:

我发现了一个与冒号非常相似的字符,“꞉”,它是一个 unicode 字符,称为修饰符字母冒号。这没有像全角冒号那样的空格,并且与常规冒号几乎完全相同,但符号有效。您可以从上面复制并粘贴它,也可以使用代码点 U+A789

【讨论】:

  • 太棒了。我一直在追踪这些文件名的 unicode 替换,所以谢谢!你太棒了。我知道你没有问,但是,为了它的价值,如果你需要问号,你可以使用 '⁇' 代替。 (U+2047)。对于斜杠,您可以使用除斜杠:'∕' (U+2215)。也许有人会发现这些有用。
【解决方案2】:

冒号是 Windows 文件名的无效字符。您将无法在文件名中允许“:”,但您可以解决它。

你可以做你已经做过的事情;创建一个脚本,用 UNIX 端的有效字符替换这些无效字符。或者,您可以使用文件名字符翻译在 Windows 服务器上处理此问题:http://support.microsoft.com/kb/289627

【讨论】:

  • 我相信我已经通过即时重命名文件上传解决了这个问题,但是我需要以某种方式将文件放到文件名中带有冒号的 Windows 机器上。我们的客户以某种方式这样做,所以它一定是可能的。
  • @David:是什么让您认为您的客户正在这样做?您确定上传来自 Windows 机器吗?
  • 小心——你可以创建一个名为 FOO:BAR 的东西,但是你得到的是一个名为 FOO 的文件,其中包含一个名为 BAR 的数据流(以及未命名的数据流)。在目录列表中,您只会看到 FOO。
  • 我收到关于尝试上传文件名的错误报告。我已经确认至少有一些尝试上传来自 Windows 机器。
  • 我知道这不是故意的,但我需要验证我的解决方案是否解决了这个问题。我将如何创建一个名为 foo:bar 的文件?
【解决方案3】:

我发现的保留字符的其他替换是

” ‹ › ⁎ ∕ ⑊ \︖ ꞉ ⏐

例如在 python 中你会这样做:

fixed_name = orig_name.replace('\\\\','⑊')
forbidden_characters = '"*/:<>?\|'
unicode_characters = '”⁎∕꞉‹›︖\⏐'
for a, b in zip(forbidden_characters, unicode_characters):
    fixed_name = fixed_name.replace(a, b)

【讨论】:

  • man 8 ntfs-3g 状态:The forbidden characters are the nine characters " * / : &lt; &gt; ? \ |。我在你的回答中数了 10,这是什么:
  • @malat 在这种情况下它不是一个字符,它会将两个字符 \\ 替换为一个看起来相似的字符 ,因为用两个替换的单字符反斜杠替换它会看起来像这样\\
【解决方案4】:

根据您提供的文件名,您的文件名中的字符可能不是文字冒号:,它是Windows 文件名中的保留字符,而是全角冒号。它是一个 Unicode 字符,看起来非常像一个冒号,在视觉上被无法删除的空格包围。你可以像处理任何 Unicode 字符一样处理它,代码点是U+FF1A

【讨论】:

  • 这并没有解决 OP 的问题;虽然建议非常好,但您应该将其放在问题的评论中以问答方式询问/回答这个问题,就像在 Jeopardy 中一样,首先询问“如何在 Windows 文件名中使用冒号?”问题,选择问答风格的答案并在此处提供此信息。
  • @vaxquis:相反,我认为这很可能确实是 OP 问题的原因;他认为他试图处理的文件名中有冒号,但它们可能是全角冒号。
  • @HarryJohnston 在这种情况下,我正在编辑问题以明确包含此信息
【解决方案5】:

你可以使用CJK(中文/日文/韩文)一个

":"

这很一般。

【讨论】:

    【解决方案6】:

    目前,您将使用 WSL,用于说明的 url:https://docs.microsoft.com/en-us/windows/wsl/install-win10

    然后您可以在您的 Linux 发行版中创建一个冒号。

    【讨论】:

      【解决方案7】:

      如何使用看起来像冒号的符号命名文件或文件夹

      在下面的示例中,字体大小为 12,但符号除外,它设置为下标、粗体,字体大小为 16。冒号状符号的字符代码为 02F8。

      下标设置的原因是将符号的位置相对于其垂直位置更低。应用粗体和更大的字体设置,以便符号在页面上更容易识别,并且在文件或文件夹名称中使用时没有影响。

      示例:(C˸) 符号 – 下标、Calibri、粗体和 16 号字体。

      *使用 Windows 7 和 Word 2007

      【讨论】:

        猜你喜欢
        • 2013-01-21
        • 2011-08-24
        • 1970-01-01
        • 2018-07-23
        • 1970-01-01
        • 2021-10-07
        • 2023-02-01
        • 1970-01-01
        相关资源
        最近更新 更多