Filenames
文件路徑可以是無效的 UTF-8 嗎?
標題說明了一切:如果我有文件路徑的字節並且我嘗試將它們解碼為 UTF-8,操作是否可能會失敗(即有效的 unix 文件路徑的字節可能是無效的 UTF-8)?
是的,完美。本機 Linux 文件系統的文件路徑/名稱可以包含除
NULL
和之外的任何二進制數據/
。touch "$(dd if=/dev/urandom bs=128 count=1)"
會帶你到那裡。該命令可能會失敗,因為它不會清理任何東西 - 您可能需要多次執行它才能獲得良好的效果。
除了 Artem S. Tashkinov 的回答:
偶然發現文件名中無效的 UTF-8 序列的一個常見原因是:它們是在不同的語言環境設置下創建的。是的:發現仍在使用 ISO-8859 字元集編碼執行的系統並不罕見。更不用說世界各地的 PC 和 MAC 上使用的無數不同的字元集……
以下範例顯示了同一目錄中具有相同名稱Überraschung(德語為驚奇)的兩個文件。一個文件是用 創建的
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 shell中環境變數的設置。它控制 UNIX 系統如何解釋和處理字元。- 終端仿真的字元編碼(例如gnome-term或putty)。這控制了字元在螢幕上的顯示方式。