UnixベースのオペレーティングシステムではUTF-8ファイル名が許可されていますか?それでは、ファイルをディスクに書き込むために特別な作業を行う必要がありますか?
私が何をしたいのかを説明します。 FTPを介してリモートシステムにファイルを転送するアプリケーションを作成していますが、ファイル名はUTF-8形式である可能性があるいくつかのメタデータセットを介して動的に設定されています。 Unix / Linuxでディスクにファイルを書き込むには何かする必要があるのだろうか。
また、フォローアップでUTF-8をサポートしていないシステムにUTF-8ファイル名をアップロードするとどうなりますか?
答え1
Unix / Linuxでは、ファイル名はスラッシュまたはNULを除くすべてのバイトシーケンスです。スラッシュはパスコンポーネントを区切り、NUL はパス名を終了します。
したがって、必要なファイル名エンコーディングを使用できます。一部のアプリケーションは、ファイル名にどの文字があるかわからない場合は、特定のエンコーディングに問題がある可能性があります。たとえば、誤って作成されたシェルスクリプトは、空白のあるファイル名を処理しないことがよくあります。
最新のUnix / Linux環境は、UTF-8でエンコードされたファイル名をうまく処理します。
答え2
内部的には、ほとんどのファイルシステムはバイトを格納します。ファイルシステムドライバはバイトが何を意味するのか気にしません。 Linuxおよび他のほとんどの最新のUNICEの汎用ファイルシステムドライバは、/
ファイル名にnullバイトを除くすべてのバイトを受け入れます。
一部のファイルシステムにはエンコード制限がある場合があります。通常、FAT や NTFS などの非基本ファイルシステムです。一部のネットワークファイルシステム(Sambaなど)はサーバーとクライアントのエンコード間で変換できるため、サーバーとクライアントの構成が一致していることを確認する必要があります。
通常、ファイル名を構成するバイトは、ほとんどのシステムでUTF-8として解釈されます。 FTP経由で名前を送信するアプリケーションなど、ファイル名を文字として解釈するアプリケーションを実行している場合は、ファイル名がUTF-8でエンコードされたことを通知するようにアプリケーションを構成する必要があるかもしれません。多くのコマンドラインアプリケーションでは、環境をLC_CTYPE
UTF-8ロケールに設定することでこの問題を解決できます。en_US.UTF-8
UTF-8をサポートしていないシステムにファイルを保存しても構いません。バイトは変更されません。ファイル名を構成する文字を表示できませんが、UTF-8をサポートするシステムにファイルを再コピーすると、同じバイトがまだUTF-8文字として表示されます。
独自のアプリケーションを作成する場合は、可能であれば、保存および転送に内部的にUTF-8を使用することをお勧めします。