概要:
- Windows:ASCIIの制御文字以外のもの
\/:*?"<>|
- Linux、OS-X:nullまたはnull以外のもの
/
すべてのプラットフォームで、ASCII制御文字などの印刷不能文字を避けることが最善です。
Windows
Windowsでは、Windowsエクスプローラは制御文字を許可しません。 \/:*?"<>|
スペースを使うことができます。スペースを使用する場合は、コマンドラインから使用するときにファイル名を引用符で囲む必要があります(ただし、GUIアプリケーションは私が知る限り影響を受けません)。 NTFSなどのWindowsファイルシステムでは、エンコーディングをファイル名で格納しているようですが、UTF-16が標準です。
Windowsの一部では大文字と小文字が区別され、他の部分では大文字と小文字が区別されません。
Windows NTFSファイルシステムでは、 "Ab"と "ab"のような異なるファイル名を作成するのは簡単です。これらの名前は、別々のコンテンツを含む別々のファイルを表します。ただし、Windowsのコマンドプロンプトでは、両方のファイルがうまく表示されます。 dir
のようなコマンドを使用してそれらの1つに簡単にアクセスしたり操作することはできません。 type
。下記参照。
Linux、OS-X
LinuxおよびOS-Xのみ /
印刷可能なASCIIセットの禁止は私が信じています。いくつかの文字(シェルのメタ文字は *?!
)はコマンドラインで問題を起こし、ファイル名を適切に引用符で囲むかエスケープする必要があります。
ext2、ext3などのLinuxファイルシステムは文字セットにとらわれず(多かれ少なかれバイトストリームとして扱います - nullのみ /
禁止されています)。つまり、ファイル名をUTF-8エンコーディングで保存できます。表示や処理のためにファイル名を正しく変換するためにどのエンコーディングを使用すればよいかを知るのは、シェルまたは他のアプリケーションの責任です。
結論
だからあなたはおそらく安全に何かのように使用することができます ✣
(入力がそれほど難しくなかった場合)
Windowsでの大文字と小文字の区別
C> dir /B
Ab
aB
аB
C> type Ab
b
b
C> type aB
b
b
C> type аB
unicode homograph
2番目のファイル、Windowsの内容を入力することはできません。 type
commandは代わりにAbの内容を返すだけです。 3番目のファイルもLinux上のaBとは異なるでしょう。
(Windows 10 NTFS)