Linuxでは、ファイル名とパスにどの文字セットエンコーディングが使用されますか?

Linuxでは、ファイル名とパスにどの文字セットエンコーディングが使用されますか?

これは私が使用するファイルシステムによって異なりますか?たとえば、ext2/ext3/ext4ですが、ISO 9660を含む「joliet」CD-ROMを挿入するとどうなりますか? POSIXには、一種のファイル名文字セットエンコーディング仕様が含まれていると聞きました。

本質的に私が知りたいのは、UTF-8でエンコードされたファイル名を取得した場合、それをLinuxのファイルI / O APIに渡す前にどのような処理/変換を実行する必要がありますか?

ベストアンサー1

他の人が指摘したように、これに対する実際の答えはありません。ファイル名とパスはエンコードされません。オペレーティングシステムはバイトシーケンスのみを処理します。個々のアプリケーションは特定の方法でエンコードされたと解釈することを選択できますが、これはさまざまです。

特に、Glib(Gtk +アプリケーションで使用)すべてのファイル名は、ユーザーのロケールに関係なくUTF-8でエンコードされていると想定されます。。これは環境変数によってオーバーライドできます。G_FILENAME_ENCODINGそしてG_BROKEN_FILENAMES

一方、Qtはデフォルトとしてすべてのファイル名が現在ユーザーのロケールでエンコードされているとします。。個々のアプリケーションはこの仮定を上書きすることを選択できますが、そうすることはなく、外部上書きスイッチもありません。

最新のLinuxディストリビューションは、すべてのユーザーがUTF-8ロケールを使用し、外部ファイルシステムマウントのパスがUTF-8に変換されるように設定されているため、これらのポリシーの違いは通常何の影響もありません。しかし、本当に安全が必要な場合は、「NULで終了して'/'で区切られたバイトシーケンス」以外のファイル名構造を想定することはできません。

(また、注:ロケールはプロセスごとに異なる場合があります。同じユーザーが実行する2つの異なるプロセスは、異なる環境変数を設定するだけで異なるロケールに存在する可能性があります。)

おすすめ記事