タイトルにすべてが記載されています。ファイルパスのバイトがあり、それをUTF-8にデコードしようとすると操作が失敗する可能性はありますか?つまり、有効なUnixファイルパスのバイトが無効なUTF-8である可能性があります。 8)?
ベストアンサー1
Artem S. Tashkinovの回答に加えて、以下の内容があります。
ファイル名に無効なUTF-8シーケンスが表示される一般的な理由は、そのシーケンスが別のロケールで生成されたためです。例:システムがまだISO-8859文字セットエンコーディングを使用して実行されることはまれではありません。世界中のPCとMACで使用されている多数のさまざまな文字セットは言うまでもありません。
次の例は、同じ名前の2つのファイルを示しています。超越(ドイツ語驚く)同じディレクトリにあります。あるファイルが使用され、LANG=en_us.UTF-8
別のファイルが使用されますLANG=en_US.ISO-8859-15
。
UTF-8エンコーディングを使用してリストする場合:
$ ls -lt
total 0
-rw-r--r-- 1 ktf ktf 0 Sep 6 12:01 ''$'\334''berraschung'
-rw-r--r-- 1 ktf ktf 0 Sep 6 12:00 Überraschung
ISO-8859-15エンコーディングを使用してリストする場合:
$ ls -lt
total 0
-rw-r--r-- 1 ktf ktf 0 Sep 6 12:01 Überraschung
-rw-r--r-- 1 ktf ktf 0 Sep 6 12:00 'Ã'$'\234''berraschung'
ヒント:文字セットを正しく切り替えるには、以下を変更する必要があります。両方次の設定:
LANG
UNIX/Linux シェルでの環境変数の設定。 UNIX システムが文字を解釈して処理する方法を制御します。- 端末エミュレーション用の文字エンコード(例:GNOME用語またはパテ)。画面に文字が表示される方法を制御します。