<p>让我们保持简单,先回答问题。</p>
<ol>
<li><p>禁止的可打印ASCII字符有:</p>
<ul>
<li><p>Linux/Unix系统:</p>
<pre><code>/ (forward slash)
</code></pre></li>
<li><p>窗口:</p>
<pre><code>< (less than)
> (greater than)
: (colon - sometimes works, but is actually NTFS Alternate Data Streams)
" (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)
</code></pre></li>
</ul></li>
<li><p><strong>不可打印字符</strong></p>
<p>如果您的数据来自允许不可打印字符的源,那么还有更多需要检查的内容。</p>
<ul>
<li><p>Linux/Unix系统:</p>
<pre><code>0 (NULL byte)
</code></pre></li>
<li><p>窗口:</p>
<pre><code>0-31 (ASCII control characters)
</code></pre></li>
</ul>
<p><em>注意:</em>在Linux/Unix文件系统下,创建文件名中带有控制字符的文件是合法的,<a href="https://www.dwheeler.com/essays/fixing-unix-linux-filenames.html" rel="noreferrer">it might be a nightmare for the users to deal with such files</a>。</p></li>
<li><p><strong>保留文件名</strong></p>
<p>保留以下文件名:</p>
<ul>
<li><p>窗口:</p>
<pre><code>CON, PRN, AUX, NUL
COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9
LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9
</code></pre>
<p>(它们本身和任意文件扩展名,例如<code>LPT1.txt</code>)。</p></li>
</ul></li>
<li><p><strong>其他规则</strong></p>
<ul>
<li><p>窗口:</p>
<p>文件名不能以空格或点结尾。</p></li>
</ul></li>
</ol>