GNU/Linux >> Linux の 問題 >  >> Linux

Linux でのファイル システムの文字エンコーディングに関するいくつかの質問

順番に読んでいただくと理由が明らかになるはずです。

1. LANG/LC_ALL 環境に関係なく、固定文字エンコーディングを使用してファイル名を保存するように Linux ファイルシステムを構成することは可能ですか?

いいえ、これは不可能です。質問で述べたように、UNIX ファイル名は単なる一連のバイトです。カーネルは、完全にユーザー空間 (つまり、アプリケーションレベル) の概念であるエンコーディングについて何も知りません。

つまり、カーネルは LANG について何も知りません。 /LC_* であるため、翻訳できません。

2.異なるファイル名で同じファイルを参照することはできますか?

同じファイルを参照する複数のディレクトリ エントリを持つことができます。ハード リンクまたはシンボリック リンクを介して作成できます。

ただし、現在のエンコーディングで有効でないファイル名 (たとえば、UTF-8 ロケールで作業している場合の GBK 文字列) は、表示されたとしても正しく表示されないことに注意してください。

3.カーネルにパッチを適用して、ファイル システムと現在の環境の間で文字エンコーディングを変換することはできますか?

カーネルにパッチを当てることはできません これを行うには (1. を参照)、理論的には C ライブラリ (glibc など) にパッチを適用してこの変換を実行し、カーネルを呼び出すときに常にファイル名を UTF-8 に変換し、それらを現在の形式に戻すことができます。カーネルからファイル名を読み取るときのエンコーディング

より簡単な方法は、FUSE を使用してオーバーレイ ファイルシステムを作成することです。これは、ファイル名を UTF-8 との間で変換した後、任意のファイル システム要求を別の場所にリダイレクトするだけです。理想的には、このファイルシステムを ~/trans にマウントできます 、および ~/trans/a/GBK/encoded/path へのアクセスが行われたとき 次に、FUSE ファイルシステムは実際に /a/UTF-8/encoded/path にアクセスします .

ただし、これらのアプローチの問題点は、ファイル システムに既に存在し、UTF-8 でエンコードされていないファイルをどうするかということです。単に翻訳せずにそのまま渡すことはできません。変換方法がわからないからです。無効な文字シーケンスを ? に変換してそれらを台無しにすることはできません 競合が発生する可能性があるため...


Linux
  1. LinuxでファイルをUTF-8エンコーディングに変換する方法

  2. Linux –ターミナル経由でファイルシステムタイプを表示する方法??

  3. Linuxでいくつかのディレクトリに移動します

  1. Linuxインタビューの質問と回答のトップ25

  2. Linux インタビューの質問 – 基本的なファイルとディレクトリのアクセス許可

  3. Linuxでファイルをメモリに配置/保存する方法は?

  1. Linux –すべてがファイルですか?

  2. Linuxのファイル内の圧縮ファイルシステム?

  3. 大きなファイルやディレクトリがないにもかかわらず、Linux ファイルシステムがいっぱいになっている