Какие технические причины существуют для того, чтобы не использовать пробелы в именах файлов?

46486
Chris W. Rea

Кто-то из моих знакомых выразил сегодня раздражение в отношении тех из нас, кто не использует пробелы в наших именах файлов, например, NamingThingsLikeThis.txtнесмотря на то, что большинство современных операционных систем поддерживают пробелы в именах файлов.

Существуют ли технические причины, по которым все еще часто можно увидеть имена файлов без (соответствующих) пробелов? Если да, то каковы эти технические причины того, что пробелы в именах файлов избегаются или не поощряются, и при каких обстоятельствах они актуальны?

Самая очевидная причина, по которой я мог придумать, и почему я обычно избегаю этого, - это дополнительные кавычки, необходимые в командной строке при работе с такими файлами. Есть ли другие важные технические причины?

75
Как вы сказали, с ними намного проще работать в командной строке. И для программирования я не уверен, возможно ли вообще или возможно использовать пробелы в именах файлов. Alvin Row 14 лет назад 0

5 ответов на вопрос

64
David Spillett

Пробельные символы в именах файлов могут вызывать настоящую боль в общеизвестных словах во многих контекстах командной строки и в сценариях, где вы должны быть осторожны, чтобы убедиться, что они правильно экранированы, поэтому не выглядите как разделители для команд, которыми вы являетесь Бег.

Просто безопаснее не иметь их там, даже если вы уверены, что файл / dir / what-ever никогда не будет использоваться в таком контексте.

Это, и старые привычки тяжело умирают.

Они - также правильная королевская боль, с которой приходится иметь дело, тогда вы должны составить пути и изменить их. Перед повторным экранированием / повторным цитированием убедитесь, что компоненты не заключены в кавычки и не экранированы для модификации, особенно если части отправляются в другие биты кода для манипуляции. afrazier 13 лет назад 0
Если вы считаете пробелы плохими, попробуйте работать с файлами с символами новой строки (`'\ n'`) в их именах. (Unix-подобные системы фактически допускают это; Windows вообще или, по крайней мере, затрудняет это.) Keith Thompson 11 лет назад 2
30
Stobor

В дополнение к другим ответам о командной строке и старых привычках, существует также много сетевых протоколов, которые требуют особого внимания при работе с именами файлов, содержащими пробелы.

(Если вы когда-либо пытались загрузить «Product List.pdf» с веб-сайта и в результате получили файл с именем «Product»), вас это укусило, потому что программист на другом конце не знал или не мог определить правила цитирования для заголовка http Content-Disposition.)

+1. HTTP для начала. Пробелы в URL (для любого протокола, а не только HTTP) должны быть экранированы до% 20 или +. Путаница может возникнуть, когда они не закодированы так, как должно быть. Для веб-страниц есть визуальная причина избегать как пробелов, так и подчеркивания («_»), обычно используемого для их замены - они могут выглядеть одинаково в подчеркнутой ссылке, поэтому кто-то, скопировав ссылку вручную или прочитав ее, может получить это неправильно. David Spillett 14 лет назад 11
Одной из самых раздражающих вещей о пробелах, которые необходимо кодировать в URL-адресах, является склонность определенного программного обеспечения в конечном итоге сохранять закодированные пробелы ... SamB 13 лет назад 5
Это правда? В 2018 году это случится? Chris Calo 6 лет назад 0
@ChrisCalo Вы можете заметить, что этот ответ был дан в 2009 году, а не в 2018 году. Но да, это все еще происходит в 2018 году. Возможно, реже, теперь, когда большинство начинающих разработчиков используют фреймворки для создания веб-сайтов, а не делают все с нуля, но это все еще проблема. Stobor 6 лет назад 0
28
Der Hochstapler

Многие причины исторические. Это не значит, что они не имеют смысла сегодня.

Проблемы в мобильности

При именовании файла вам также может потребоваться учитывать, как другие (файловые) системы будут обращаться с этим именем файла. Символ в имени файла может подойти для вашей системы, но это может быть проблемой для другой системы.

Таким образом, до тех пор, пока существует малейшая вероятность того, что вы захотите легко получить доступ к файлу из старой системы, вы выбираете только безопасный символ. Это может включать загрузку старой системы восстановления, которую вы держали, или страх, что последние версии Windows по-прежнему основаны на MS-DOS.

длина

Файловая система может ограничивать длину файла. Это было еще серьезнее в те дни, когда MS-DOS ограничивался 8,3 именами файлов . Таким образом, оставляя пробелы, вы можете добавить в имя более значимые символы.

Несколько других файловых систем также определили строгие ограничения на длину имени файла. В статье в Википедии есть таблица сравнения файловых систем для тех, кому нужны подробности.

Зарезервированные персонажи

MS-DOS также определил символ пробела как зарезервированный символ. Это связано с тем, что символ пробела использовался для заполнения в FAT . Кроме того, MS-DOS не обеспечивала экранирующую систему в оболочке.

Интерпретация командной строки

Большинство командных строк, которые мне известны, используют символ пробела в качестве разделителя параметров . Если пренебрегать правильным экранированием имени файла, это может привести к ужасным последствиям, поскольку части имени файла могут быть интерпретированы как параметры приложения, которое вы хотите вызвать.

Рассмотрим разницу между

rm foo bar 

а также

rm "foo bar" 

В статье WikiPedia, указанной выше, даже указывается на двусмысленность, возникшую из-за отсутствия правильного экранирования команды:

Неоднозначность может быть предотвращена либо путем запрета встроенных пробелов в именах файлов и каталогов в первую очередь (например, путем замены их символами подчеркивания '_'), либо, если поддерживается интерпретатором командной строки и программами, принимающими эти параметры как аргументы, заключая в себе имя со встроенными пробелами между символами кавычек или используя escape-символ перед пробелом, обычно с обратной косой чертой ('\'). Например

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 Параметр \ один Параметр \ два ...

не являются двусмысленными.

Унифицированные указатели ресурсов (URL)

При попытке описать местоположение файла, используя URL, пробелы необходимо экранировать.

Персонажи могут быть небезопасными по ряду причин. Символ пробела небезопасен, так как значительные пробелы могут исчезнуть, а незначительные пробелы могут быть введены, когда URL-адреса транскрибируются, набираются или подвергаются обработке программ обработки текста.

Источник: RFC1738

Таким образом, пробел должен быть заменен %20вместо. Это делает часть имени файла в URL менее читаемой и, таким образом, заставляет людей избегать его.

Это действительно хороший ответ. Это должно быть на вершине! Kamil 9 лет назад 0
25
user7012

Пробелы кодируются или преобразуются %20в имена файлов в Интернете, что может затруднить управление активами сайта.

Имея Image 1.pngи Image%201.pngсбивает с толку. Это проще в использовании Image001.png.

Это действительно относится к той же категории, что и escape-последовательности для командной строки.

5
Rook

Иногда пробелы могут представлять проблему при работе в командной строке, или при использовании старых ОС, или при написании программ, которые будут скомпилированы на разных ОС, или когда ... Есть много причин, которые могут представлять проблему, и я не На самом деле, мне кажется, что писать файл так: file-without-blanks.txt или file_without_blanks.txt - такая проблема . Я предпочитаю Dask, потому что подчеркивание может иногда становиться невидимым при работе, например, с подчеркнутым шрифтом.

Но в основном это привычка старости. Что я не чувствую, что есть достаточно про причины отказаться.


Дополнительная заметка, возможно, не связанная, но тем не менее я ее выложу здесь. Люди, которые называют свои файлы пробелами, обычно не думают об этом; те, кто не часто знает, почему их стоит избегать в именах файлов.
И, все мы можем согласиться, нет ничего хуже, чем файл с именами «Дорогой сэр или мадам, я пишу вам это письмо, чтобы сообщить вам о yo.doc».

Не только пробелы - длина файла тоже что-то значит, и ИМХО, она не должна быть длиннее, скажем, 30 символов. Длинные имена файлов с пробелами внутри также являются благословением при записи компакт-дисков, DVD-дисков и т. Д., Которые необходимо читать в старых ОС, а также между платформами Win и * nix.

Lazy Word пользователи ... SamB 12 лет назад 2

Похожие вопросы