Unixファイル名のエンコードについて
ファイル名のエンコードがどのように機能するかを理解するのに苦労しています。unix.SEには矛盾する説明があります。 ファイル名は文字として保存されます 別の答えを引用するには: Linuxでのファイルシステムの文字エンコーディングに関するいくつかの質問 […]質問で述べたように、UNIXファイル名は単なる文字列です。カーネルはエンコードについて何も知りません。これは完全にユーザー空間(つまり、アプリケーションレベル)の概念です。 ファイル名が文字として保存される場合、最終的にファイル名がディスク上のビットまたはバイトシーケンスとして終了する必要があるため、何らかの種類のエンコーディングが必要になります。ユーザーが選択できる場合は任意のカーネルに供給されたバイト配列に文字をマップするためのエンコーディングを、作成することが可能である任意の有効なファイル名のバイトシーケンスを。 次のことを想定します。ユーザーがランダムエンコーディングXを使用して、ファイルfooをバイトシーケンスαに変換し、ディスクに保存します。別のユーザーはエンコーディングYを使用します。このエンコーディングでは、αはに変換されますが/、これはファイル名として許可されていません。ただし、最初のユーザーの場合、ファイルは有効です。 このシナリオは起こらないと思います。 ファイル名はバイナリBLOBとして保存されます 別の答えを引用するには: Linuxでファイル名とパスに使用される文字セットエンコーディングは何ですか? 他の人が述べたように、これに対する答えは実際にはありません。ファイル名とパスにはエンコードがありません。OSはバイトシーケンスのみを処理します。個々のアプリケーションは、何らかの方法でエンコードされていると解釈することを選択できますが、これは異なります。 システムが文字を処理しない場合、特定の文字(/またはNULL)をファイル名でどのように禁止できますか?/ エンコーディングなしの概念はありません。 説明は、ファイルシステムは任意の 文字を含むファイル名を格納でき、無効な文字を含むファイル名で停止するのはエンコードを考慮するユーザープログラムのみであるということです。これは、ファイルシステムとカーネルが/。を含むファイル名を問題なく処理できることを意味します。 また、これは間違っていると思います。 エンコードはどこで行われ、特定の文字を許可しないという制限はどこにありますか?