UTF 8 文件名?
在基於 unix 的作業系統中是否允許使用 utf6 文件名?如果是這樣,我需要做一些特別的事情來將文件寫入磁碟。
讓我解釋一下我希望做什麼。我正在編寫一個應用程序,該應用程序將通過 ftp 將文件傳輸到遠端系統,但文件名是通過一組可能位於 utf8 中的元數據動態設置的。我想知道是否需要做一些事情才能將文件寫入 unix/linux 中的磁碟。
另外作為後續行動,是否有人知道如果我將 utf 8 文件名上傳到不支持 utf8 的系統會發生什麼?
在 Unix/Linux 上,文件名是除斜杠或 NUL 之外的任何字節的序列。斜杠分隔路徑組件,NUL 終止路徑名。
因此,您可以對文件名使用任何您想要的編碼。如果某些應用程序對文件名中可能包含哪些字元一無所知,則它們可能會在某些編碼方面遇到問題——例如,編寫不佳的 shell 腳本通常不會處理帶有空格的文件名。
現代 Unix/Linux 環境可以很好地處理 UTF-8 編碼的文件名。
在內部,大多數文件系統儲存字節:文件系統驅動程序並不關心字節的含義。Linux 和大多數其他現代 unice 上的通用文件系統驅動程序允許除空字節以外
/
的任何字節出現在文件名中。有些文件系統可能有編碼限制——通常是非本地文件系統,例如 FAT 或 NTFS。一些網路文件系統(例如 Samba)可能會在伺服器編碼和客戶端編碼之間進行轉換;您需要確保伺服器和客戶端配置是一致的。
按照慣例,在大多數係統上,構成文件名的字節被解釋為 UTF-8。如果您執行將文件名解釋為字元的應用程序,例如通過 FTP 傳輸名稱的應用程序,您可能需要配置此應用程序以告訴它您的文件名以 UTF-8 編碼。將環境設置
LC_CTYPE
為 UTF-8 語言環境就像en_US.UTF-8
許多命令行應用程序一樣。如果您將文件儲存在不支持 UTF-8 的系統上,那也沒關係。字節將保持不變。您將無法顯示構成文件名的字元,但如果將文件複製回支持 UTF-8 的系統,這些相同的字節仍將顯示為 UTF-8 字元。
如果您正在編寫自己的應用程序,那麼在內部使用 UTF-8 並儘可能用於儲存和傳輸是一個好主意。