題 在文件名中不使用空格字符有哪些技術原因?


我認識的人今天對我們這些在文件名中不使用空格的人表示不滿,例如: NamingThingsLikeThis.txt  - 儘管大多數現代操作系統都支持文件名中的空格。

在那兒 技術原因 在沒有(適當的)空格的情況下看文件名仍然很常見?如果是這樣,這些技術原因是什麼,文件名中的空格被避免或不鼓勵,以及它們在什麼情況下相關?

我能想到的最明顯的原因,以及為什麼我通常會避免它,是處理這些文件時命令行所需的額外引號。還有其他重大技術原因嗎?


75
2017-08-25 00:25


起源


就像你說的,在命令行上處理它們要容易得多。對於編程,我不確定在文件名中使用空格是否可行或可行。 - Alvin Row


答案:


在命令行的許多上下文中,文件名中的空格字符可能是一個正確的王室痛苦,在腳本中,您必須小心確保它們被正確轉義,因此看起來不像命令的分隔符運行。

即使您確定文件/目錄/永遠不會在這樣的上下文中使用,也不要將它們放在那裡更安全。

那個,老習慣難受。


64
2017-08-25 00:39



他們也是一個正確的王室痛苦處理,然後你必須組成路徑並修改它們。在重新轉義/重新引用之前確保組件沒有引用並且未轉義以進行修改,尤其是在將片段發送到其他位代碼以進行操作時。 - afrazier
如果您認為空間不好,請嘗試使用換行符處理文件('\n')在他們的名字。 (類Unix系統實際上允許這樣; Windows通常,或者至少使它變得困難。) - Keith Thompson


除了關於命令行和舊習慣的其他答案之外,還有許多網絡協議在處理包含空格的文件名時需要特別小心。

(如果您曾經嘗試過從網站下載“Product List.pdf”,最後得到一個名為“Product”的文件,那麼您會被此感到厭煩,因為另一端的程序員不知道或不能找出http Content-Disposition標頭的引用規則。)


30
2017-08-25 01:01



+1。 HTTP開始。 URL中的空格(對於任何協議,而不僅僅是HTTP)應該轉義為%20或+。當它們沒有被編碼時,可能會產生混淆。對於網頁,有一個視覺原因可以避免兩個空格和通常用於替換它們的下劃線(“_”) - 它們在帶下劃線的鏈接中看起來可能相同,因此有人手動複製鏈接或將其讀取給某人可能會得到錯了。 - David Spillett
關於需要在URL中編碼的空間最令人討厭的事情之一是某些軟件最終保持編碼空間的傾向性...... - SamB
這是真的嗎? 2018年會發生這種情況嗎? - Chris Calo
@ChrisCalo您可能會注意到這個答案是在2009年而不是2018年給出的。但是,是的,這仍然發生在2018年。現在大多數新手開發人員使用框架來構建網站而不是從零開始做所有事情,但現在仍然不太常見一個問題。 - Stobor


很多原因都是歷史性的。這並不意味著它們今天沒有意義。

可移植性問題

命名文件時,您可能還必須考慮其他(文件)系統如何處理該文件名。文件名中的字符可能適用於您的系統,但它可能是另一個系統的問題。

因此,只要您有可能希望能夠從舊系統輕鬆訪問該文件,您只需選擇 安全 字符。這可能包括啟動到您保留的舊恢復系統或擔心最近的Windows版本仍以某種方式基於MS-DOS。

長度

文件系統可能會限製文件的長度。在MS-DOS被限制的時代,這甚至更為嚴重 8.3文件名。因此,省略空格使您可以在名稱中添加更有意義的字符。

其他幾個文件系統也對文件名長度進行了嚴格限制。維基百科有一張桌子 關於文件系統比較的文章 對於那些想要細節的人。

保留字符

MS-DOS還將空格字符定義為保留字符。這是因為空間字符用於 填充在FAT中。另外,MS-DOS沒有在shell中提供轉義系統。

命令行解釋

我所知道的大多數命令行都使用了 空格字符作為參數分隔符。當忽略正確轉義文件名時,它可能會產生可怕的後果,因為文件名的某些部分可以解釋為您要調用的應用程序的參數。

考慮之間的區別

rm foo bar

rm "foo bar"

上面鏈接的WikiPedia文章甚至指出了由於缺少正確轉義命令而引入的歧義:

可以通過首先禁止文件名和目錄名中的嵌入空格來防止歧義(例如,通過用下劃線'_'替換它們),或者,如果命令行解釋器支持嵌入空格,並且將這些參數作為參數,通過在引號字符之間包含嵌入空格的名稱或在空格之前使用轉義字符,通常是反斜杠('\')。例如

Long path/Long program name Parameter one Parameter two ...

是不明確的(是“程序名稱”程序名稱的一部分,還是兩個參數?);然而

Long_path/Long_program_name Parameter_one Parameter_two ...,
LongPath/LongProgramName ParameterOne ParameterTwo ...,
"Long path/Long program name" "Parameter one" "Parameter two" ...

和       Long \ path / Long \ program \ name參數\ one參數\ two ...

不是模棱兩可的。

統一資源定位器(URL)

在嘗試使用URL描述文件的位置時,需要轉義空格。

出於多種原因,角色可能不安全。空間      角色是不安全的,因為重要的空間可能會消失      當URL被轉錄或排版或受到文字處理程序的處理時,可能引入不重要的空間。

資源: RFC1738

因此,空間必須用a代替 %20 代替。這使得URL的文件名部分不易讀取,從而使人們首先避免使用它。


28
2017-10-06 13:05



多數民眾贊成真的很好。它應該在頂部! - Kamil


空格被編碼或轉換為 %20 在網絡上的文件名中,這可能會使管理網站的資產變得更加困難。

Image 1.png 和 Image%201.png 令人困惑。它更容易使用 Image001.png 代替。

這與命令行的轉義序列屬於同一類別。


25
2017-08-25 02:30





有時,空格在處理命令行時,或者在使用較舊的操作系統時,或在編寫將在不同操作系統上編譯的程序時,或者......有很多原因可能會出現問題時,會出現問題,我不知道真的覺得把文件寫成如此麻煩: 文件沒有-blanks.txt 要么 file_without_blanks.txt。我更喜歡dask,因為下劃線在處理時有時會變得不可見,例如,帶下劃線的字體。

但大多數情況下,從老年開始就是習慣問題。哪個我覺得還不夠  放棄的理由。


另外一個說明,可能沒有關係,但我會把它放在這裡。用空格命名文件的人通常不會那麼想;那些不經常知道為什麼在文件名中避免它們的好處的人。
並且,我們都同意,沒有什麼比一個名字“親愛的先生或女士,我寫這封信給你通知你yo.doc”的文件更糟糕。

不只是空格 - 文件長度也算是東西,恕我直言,它不應該超過,比方說30個字符。對於內置空格的長文件名,在錄製CD,DVD等需要在較舊的操作系統下以及Win和* nix平台之間讀取時也是一種祝福。


5
2017-08-25 00:50



懶惰的Word用戶...... - SamB