UNIXベースのオペレーティングシステムでは、utf6ファイル名を使用できますか?もしそうなら、ファイルをディスクに書き込むために特別なことをする必要があります。
私が何をしたいのかを説明させてください。 FTPを介してリモートシステムにファイルを転送するアプリケーションを作成していますが、ファイル名は、utf8に含まれる可能性があるメタデータのセットを介して動的に設定されます。 unix/linuxのディスクにファイルを書き込むために何かする必要があるかどうか疑問に思っています。
また、フォローアップとして、utf8をサポートしていないシステムにutf 8ファイル名をアップロードした場合に何が起こるか誰もが知っていますか?
Unix/Linuxでは、ファイル名はスラッシュまたはNULを除く任意のバイトのシーケンスです。スラッシュはパスコンポーネントを区切り、NULはパス名を終了します。
したがって、ファイル名には任意のエンコーディングを使用できます。一部のアプリケーションは、ファイル名に含まれる可能性のある文字についてナイーブである場合、一部のエンコーディングで問題が発生する可能性があります。たとえば、不適切に記述されたシェルスクリプトは、スペースを含むファイル名を処理しないことがよくあります。
最近のUnix/Linux環境は、UTF-8でエンコードされたファイル名を問題なく処理します。
内部的には、ほとんどのファイルシステムはバイトを格納します。ファイルシステムドライバーは、バイトの意味を気にしません。 Linuxおよびその他のほとんどの最新のunices上の汎用ファイルシステムドライバーでは、/
以外のバイトとnullバイトをファイル名に含めることができます。
エンコーディングの制約がある可能性のあるファイルシステムがあります。通常、FATやNTFSなどの非ネイティブファイルシステムです。 Sambaなどの一部のネットワークファイルシステムは、サーバーエンコーディングとクライアントエンコーディングの間で変換する場合があります。サーバーとクライアントの構成が一貫していることを確認する必要があります。
通常、ほとんどのシステムでは、ファイル名を構成するバイトはUTF-8として解釈されます。 FTP経由で名前を送信するアプリケーションなど、ファイル名を文字として解釈するアプリケーションを実行する場合、ファイル名がUTF-8でエンコードされていることをアプリケーションに通知するように構成する必要がある場合があります。環境LC_CTYPE
をen_US.UTF-8
のようなUTF-8ロケールに設定すると、多くのコマンドラインアプリケーションでうまく機能します。
UTF-8をサポートしていないシステムにファイルを保存する場合、問題はありません。バイトは同じままです。ファイル名を構成する文字を表示することはできませんが、UTF-8をサポートするシステムにファイルをコピーすると、それらの同じバイトは引き続きUTF-8文字として表示されます。
独自のアプリケーションを作成している場合は、内部でUTF-8を使用し、可能な限り、保存と送信に使用することをお勧めします。