我真的很想在 Windows 中使用“?”这样的字符作为文件名。我理解为什么这些字符被保留,但为什么他们没有,或者他们会通过使用看起来相同但(显然)具有不同 Unicode 代码的 Unicode 字符来规避这个问题?
我认为完全有可能,但如果不可能,为什么?
答案1
我认为它们不这样做的原因是可能会引起混淆。如果你有一个看起来像“?”的字符,但有不同的 unicode 代码 - 你如何区分它们?
你会如何向别人解释呢?“你的文件名中不能有问号,但你可以有一个看起来像问号但实际上不是问号的东西,而要输入它,你只需要使用这个 5 键组合。”?
更好的是(在我看来)将它们完全排除并避免错误。
答案2
文件名中不允许使用的字符包括:
<
(少于)>
(比...更棒):
(冒号)"
(双引号)/
(正斜杠)\
(反斜杠)|
(垂直杆或管道)?
(问号)*
(星号)
这就是你指的吗?
原因可能是因为在旧 shell 中处理包含这些字符的文件太难了command.com
,例如?
也意味着任何一个字符,*
也意味着任何文件,等等。
他们没有教每个人如何处理这些特殊情况,而是禁止这样做,以便更容易编写脚本。
这些字符没有 Unicode 等效字符,即使有等效字符,也仍然无法解决该问题:现有的 ASCII?
仍然*
必须作为通配符使用,否则每个人都必须重写他们的脚本。
答案3
您可以使用以下与原始 Unicode 相似的 Unicode,没有任何风险
它们作为窗口名称有效:
- « (U+00AB) 而不是 < (小于)
- » (U+00BB) 而不是 > (大于)
- ։ (U+0589或 ÷ (U+00F7) 或者 ‡ (U+2021) 代替 : (冒号)
- “(U+201C) 而不是 " (双引号)
- ⁄(U+2044) 代替 / (正斜杠)
- ∖ (U+2216) 或者 \ (暂无相关信息) 或 〵 (U+3035) 而不是 \ (反斜杠)
- ¦ (U+00A6) 代替 | (竖线或竖管)
- ‽ (U+203D)⁇(U+2047) ¿(U+00BF) 而不是 ? (问号)
- ☀ (U+2600) 代替 * (星号)
注意:Unicode 表让您按描述搜索字符(如罗马字符)、实际字符,并提供其他相关字符(看起来相同)作为参考
请在下方找到有效的文件名(复制并粘贴以试用;在 Windows 7 下使用 Windows 资源管理器可正确显示,抱歉无法添加屏幕截图)。您会注意到,在 Windows 下的外观与在浏览器中的外观不同(字体变化)
unicode 一 ☀ ¦ » ։∖ ‡〵 ÷╲ ‽ ⁇ ¿ ‰ ¢ π ∞ « ≈.txt
参考文献
- www.theasciicode.com.ar/extended-ascii-code/copyright-symbol-ascii-code-184.html
- http://www.theworldofstuff.com/characters/
- http://unicode-table.com/en/#00A9
- http://www.tedmontgomery.com/tutorial/altchrc-a.html
- http://unicode-table.com/en/#enclosed-alphanumerics
- https://stackoverflow.com/questions/8086375/what-character-to-use-to-put-an-item-at-the-end-of-an-alphabetic-list
注意:Windows 自 1980 年起就符合 Posix 标准(根据维基百科),因此它确实符合 posix RFC,包括指定文件名的 RFC。在 stack exchange 上回答提供有关 RFC 的更广泛的背景信息以及文件名中允许使用的字符
答案4
您现在可以自己使用这些字符。但我假设您的意思是让操作系统自动在 ASCII 问号(例如)和 ﹖(SMALL QUESTION MARK
-UFE56)等相似字符之间进行音译。我真的不认为这令人满意,尤其是因为 Linux 和其他操作系统(其中文件名的唯一无效字符是斜杠 ( /
) 和空字符 (ASCII 0))很容易接受这些字符。
进一步阅读:
- 修复 Unix/Linux/POSIX 文件名:控制字符(例如换行符)、前导破折号和其他问题
- 维基百科文章文件名