UTF 8ファイル名?


15

UNIXベースのオペレーティングシステムでは、utf6ファイル名は許可されますか?その場合、ファイルをディスクに書き込むために特別なことをする必要があります。

私がやりたいことを説明させてください。ftp経由でリモートシステムにファイルを転送するアプリケーションを作成していますが、ファイル名は、utf8にある可能性のあるメタデータのセットを介して動的に設定されます。unix / linuxのディスクにファイルを書き込むために必要なことがあるかどうか疑問に思っています。

また、フォローアップとして、utf 8をサポートしていないシステムにutf 8ファイル名をアップロードした場合に何が起こるか誰もが知っていますか?

回答:


20

Unix / Linuxでは、ファイル名はスラッシュまたはNULを除く任意のバイトのシーケンスです。スラッシュはパスコンポーネントを区切り、NULはパス名を終了します。

そのため、ファイル名に任意のエンコーディングを使用できます。一部のアプリケーションでは、ファイル名に含まれる文字がわからない場合、一部のエンコーディングで問題が発生する可能性があります。たとえば、適切に記述されていないシェルスクリプトは、スペースを含むファイル名を処理しません。

現代のUnix / Linux環境はUTF-8でエンコードされたファイル名をうまく処理します。


12

内部的には、ほとんどのファイルシステムはバイトを保存します。ファイルシステムドライバーはバイトの意味を気にしません。Linuxおよびその他のほとんどの最新のユニックスの汎用ファイルシステムドライバーは、/は、ファイル名に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を使用し、可能な限りストレージと送信に使用することをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.