Пробельный символ — это символьный элемент данных , который представляет собой пробел при отображении текста на компьютере .
Например, символ пробела ( U+0020 SPACE , ASCII 32) представляет собой пустое пространство, например разделитель слов в западном письме .
Печатный символ приводит к выводу при отображении, а пробельный символ — нет. Вместо этого пробельные символы определяют макет текста в ограниченной степени — прерывая обычную последовательность отображения символов рядом друг с другом. Вывод последующих символов обычно смещается вправо (или влево для письма справа налево ) или в начало следующей строки. Эффект нескольких последовательных пробельных символов является кумулятивным, так что следующий печатный символ отображается в месте, основанном на накопленном эффекте предыдущих пробельных символов.
Термин «пробел» берет свое начало в общепринятой практике отображения текста на белой бумаге . Обычно символ пробела не отображается как белый. Он влияет на отображение, но сам не отображается.
Символ пробела обычно вставляет горизонтальный пробел, который примерно такой же ширины, как буква. Для моноширинного шрифта ширина равна ширине буквы, а для шрифта переменной ширины ширина зависит от шрифта. Некоторые шрифты поддерживают несколько символов пробела, которые имеют разную ширину.
Символ табуляции обычно вставляет горизонтальное пространство, которое основано на позициях табуляции , которые различаются в зависимости от приложения .
Последовательность символов новой строки обычно перемещает место вывода рендеринга в начало следующей строки. Если она следует за текстом, она фактически не приводит к появлению пробела. Но две последовательные последовательности новой строки между текстовыми блоками приводят к появлению пустой строки между блоками. Высота пустой строки зависит от приложения.
Использование пробельных символов для разметки текста является соглашением. Приложения иногда отображают пробельные символы как видимую разметку, чтобы пользователь мог видеть то, что обычно не видно.
Обычно пользователь вводит символ пробела, нажимая spacebar, символ табуляции — нажимая , а символ новой строки — нажимая .Tab ↹↵ Enter
В таблице ниже перечислены двадцать пять символов, определенных как пробельные символы ("WSpace=Y", "WS") в базе данных символов Unicode . [1] Семнадцать используют определение пробельных символов, соответствующее алгоритму двунаправленного письма ("Bidirectional Character Type=WS"), и известны как символы "Bidi-WS". Остальные символы также могут использоваться, но не относятся к этому типу "Bidi".
Примечание: в зависимости от браузера и шрифтов, используемых для просмотра следующей таблицы, не все пробелы могут отображаться правильно.
Unicode также предоставляет некоторые видимые символы, которые можно использовать для представления различных пробельных символов в контекстах, где должен отображаться видимый символ:
"SPC"
(аналогичный символу Юникода U+2420 шириной в одну ячейку). [20] [21]Текстовые редакторы , текстовые процессоры и программное обеспечение для настольных издательских систем различаются тем, как они представляют пробелы на экране и как они представляют пробелы в концах строк, длиннее ширины экрана или столбца. В некоторых случаях пробелы отображаются просто как пустое пространство; в других случаях они могут быть представлены интерпунктом или другими символами. Для создания пробелов можно использовать множество различных символов (описанных ниже), а несимвольные функции (такие как поля и настройки табуляции) также могут влиять на пробелы.
Многие из символов пробела Unicode были созданы для совместимости с классической печатной типографикой. [27]
Даже если в цифровой типографии есть алгоритмический кернинг и выравнивание, эти пробельные символы можно использовать для дополнения электронного форматирования при необходимости.
В компьютерных кодировках символов есть обычный пробел общего назначения (символ Unicode U+0020), ширина которого будет варьироваться в зависимости от дизайна гарнитуры. Типичные значения варьируются от 1/5 em до 1/3 em (в цифровой типографике em равен номинальному размеру шрифта, поэтому для шрифта размером 10 пунктов пробел, вероятно, будет между 2 и 3,3 пунктами). Сложные шрифты могут иметь пробелы разного размера для жирных, курсивных и капительных шрифтов, и часто наборщики вручную регулируют ширину пробела в зависимости от размера и заметности текста.
В дополнение к этому универсальному пространству, можно закодировать пространство определенной ширины. Полный список см. в таблице ниже.
Длинные тире, используемые в качестве разделителей в скобках, и короткие тире , используемые в качестве соединителей слов, обычно устанавливаются непрерывно с текстом. [28] Однако такое тире может быть опционально окружено тонким пробелом , U+200A, или тонким пробелом , U+2009. Тонкий пробел может быть записан в HTML с помощью числовых ссылок на символы  
или  
, или именованной сущности  
, хотя это не поддерживается повсеместно в браузерах по состоянию на 2016 год. [ требуется обновление ] Тонкий пробел — это именованная сущность и числовые ссылки или . Эти пробелы намного тоньше обычного пробела (за исключением моноширинного (непропорционального) шрифта ), при этом тонкий пробел в частности является самым тонким из горизонтальных пробельных символов.[обновлять] 
 
 
В большинстве языков программирования синтаксис пробельные символы могут использоваться для разделения токенов . Для языка свободной формы пробельные символы игнорируются процессорами кода (т. е. компилятором ). Даже когда синтаксис языка требует пробельных символов, часто несколько пробельных символов обрабатываются так же, как один. В языке правил «вне игры» пробельные символы отступа синтаксически значимы. В сатирическом и противоречивом языке , называемом Whitespace , пробельные символы являются единственными значимыми символами, а обычный текст игнорируется.
Правильное использование пробелов в исходном коде может группировать связанную логику и сделать код более понятным. Чрезмерное использование пробелов, в том числе в конце строки, где они не обеспечивают никакого поведения рендеринга, считается помехой.
Большинство языков распознают только пробельные символы, имеющие код ASCII. Они запрещают большинство или все перечисленные выше коды Unicode. Язык C определяет пробельные символы как «пробел, горизонтальную табуляцию, новую строку, вертикальную табуляцию и перевод страницы». [29] Сетевой протокол HTTP требует использования различных типов пробельных символов в разных частях протокола, например: только символ пробела в строке состояния , CRLF в конце строки и «линейный пробел» в значениях заголовков. [30]
Типичные парсеры командной строки используют символ пробела для разделения аргументов . Значение со встроенным символом пробела является проблематичным, поскольку оно приводит к тому, что значение анализируется как несколько аргументов. Обычно парсер позволяет избежать обычного анализа аргументов, заключив текст в кавычки.
Предположим, что требуется перечислить файлы в каталоге с именем "foo bar". Эта команда вместо этого перечисляет файлы, соответствующие "foo" или "bar":
ls foo бар
Эта команда правильно указывает один аргумент:
ls "foo bar"
Некоторые языки разметки , такие как SGML , сохраняют пробелы в том виде, в котором они написаны.
Языки веб-разметки, такие как XML и HTML, обрабатывают пробельные символы особым образом, включая пробельные символы, для удобства программистов. Один или несколько пробельных символов, считываемых соответствующими процессорами отображения времени этих языков разметки, сворачиваются в 0 или 1 пробел в зависимости от их семантического контекста. Например, двойные (или более) пробелы в тексте сворачиваются в один пробел, а пробелы, которые появляются по обе стороны от " =
", разделяющего имя атрибута от его значения, не оказывают никакого влияния на интерпретацию документа. Теги конца элемента могут содержать конечные пробелы, а теги пустых элементов в XML могут содержать пробелы перед " />
". В этих языках ненужные пробелы увеличивают размер файла и, таким образом, могут замедлять сетевую передачу данных. С другой стороны, ненужные пробелы также могут незаметно отмечать код, аналогично комментариям в коде, но менее очевидно. Это может быть желательно для доказательства нарушения лицензии или авторских прав, которое было совершено путем копирования и вставки .
В значениях атрибутов XML последовательности пробельных символов обрабатываются как один пробел, когда документ считывается парсером. [31] Пробелы в содержимом элемента XML не изменяются таким образом парсером, но приложение, получающее информацию от парсера, может выбрать применение аналогичных правил к содержимому элемента. Автор документа XML может использовать атрибут xml:space="preserve"
в элементе, чтобы дать парсеру указание воспрепятствовать нижестоящему приложению изменять пробелы в содержимом этого элемента.
В большинстве элементов HTML последовательность пробельных символов обрабатывается как один разделитель между словами , который может проявляться как один пробельный символ при отображении текста на языке, который обычно вставляет такой пробел между словами. [32] Соответствующие HTML-рендеры должны применять более буквальную обработку пробелов в пределах нескольких предписанных элементов, таких как pre
тег и любой элемент, для которого CSS использовался для применения pre
обработки пробелов по типу . В таких элементах пробельные символы не будут «сворачиваться» в разделители между словами.
Как в XML, так и в HTML символ неразрывного пробела , наряду с другими нестандартными пробелами, не рассматривается как сворачиваемый «пробел», поэтому на него не распространяются приведенные выше правила.
Такое использование похоже на многословные имена файлов, написанные для операционных систем и приложений, которые путаются из-за встроенных пробельных кодов — такие имена файлов вместо этого используют подчеркивание (_) в качестве разделителя слов, как_в_этой_фразе.
Другим таким символом был U+2422 ␢ ПУСТОЙ СИМВОЛ . Он использовался в ранние годы компьютерного программирования при написании на формах кодирования. Операторы перфоратора сразу же распознали этот символ как «явный пробел». [16] Он использовался в BCDIC , [16] EBCDIC , [16] и ASCII-1963 . [16]
Символы пробела фиксированной ширины (U+2000..U+200A) получены из обычной (горячеканальной) типографики. Алгоритмический кернинг и выравнивание в компьютерной типографике не используют эти символы. Однако там, где они используются (например, при наборе математических формул), их ширина обычно указывается шрифтом, и они, как правило, не расширяются во время выравнивания. Исключением является тонкий пробел U+2009, который иногда корректируется.