utf 8 код пробела
Пробел
U+0020
Нажмите, чтобы скопировать и вставить символ
Техническая информация
Значение символа
Пробел — это расстояние между буквами, разделяющее слова.
Первые письменности были пиктографическими и идеографическими. Каждый символ обозначал слово, и разделять их не требовалось. С переходом на алфавитные системы, читать слитный текст стало очень неудобно. Тогда и появились значки разделяющие слова. Стандартный ныне символ пробела придумали далеко не сразу. В латинских и греческих текстах он применяется около тысячи лет, хотя встречался и ранее. В кириллических — прижился только в XVII веке, а в арабице в XX веке.
Кроме особого символа, указать разделение слов можно и другими способами. Например, с помощью специальных форм букв для конца или начала слова. В арабском алфавите, ряд букв существует в четырёх вариантах начертания (для начала, конца, середины, отдельно стоящей). Хотя, арабы применяют пробел, буквы по-прежнему имеют разный вид. Ещё одна альтернатива — линия над буквами. Сами слова идут без пробелов, а линия прерывается. В некоторых письменностях, разделяться могут не слова, а предложения, словосочетания или слоги. Настоящий пробел употребляется почти во всех современных системах письма. Тайцы разделяют пробелом только предложения.
Другие символы для разделения слов:
· Интерпункт. Латинский. Применялся до 600-800 годов.
Символ «Пробел» был утвержден как часть Юникода версии 1.1 в 1993 г.
Всё (или почти всё) о пробеле
Как следует из заголовка, речь в статье пойдёт о неотъемлемой части любого русскоязычного (и не только) текста — о пробеле. Мы затронем историю пробела, виды пробелов, вопросы употребления пробела в веб-типографике.
История межсловного пробела
Межсловный пробел — сравнительно позднее изобретении в истории человеческой мысли. Глубоко история пробела изложена в книге Пола Санджера (Paul Saenger) «Space between Words: The Origins of Silent Reading», а также, несколько менее глубоко, в книге Иоганнеса Фридриха «История письма».
Также есть неплохая статья Антона Бизяева о пробелах и об их истории «В начале пробелов не было», которая была опубликована в 1997 году в журнале «Publish».
Вкратце, пробел появился достаточно поздно, в тех письменностях, где отсутствие разграничения слов приводило к сложности чтения (так называемое консонантное письмо, где записываются только согласные звуки). Однако в греческом и латыни, в которых записывали и гласные звуки, использование пробела было утеряно. Пол Санджер связывает это с тем, что чтение производилось вслух, что упрощало разграничение слов при восприятии текста.
Вновь пробел начал использоваться приблизительно в VII—IX вв. н. э., и эта традиция пришла из Ирландии, где у писцов и чтецов родным языком являлся древнеирландский, а религиозная литература записывалась на латыни. По-видимому, по этой причине монахи испытывали трудности с чтением вслух. Считается, что появление пробела плотно связано с постепенным переходом от чтения вслух к чтению про себя. Примерами книг на латыни с межсловными пробелами являются памятники британской литературы: Евангелие из Дарроу (VII в.) и Келлская книга (VIII—IX вв.).
В глаголице и кириллице пробел также отсутствовал, и в привычном нам смысле используется только с XVII века.
До того, как человечество изобрело наборный шрифт, никакой особенной классификации межсловных пробелов не было — ставили писцы пробелы на глазок и ставили. Напомню (мы писали об этом в статье «Выключка по ширине»), что рукопись и ксиллография относятся к способам создания текстов без подвижности литер. Естественно, пробелы могли получаться различной ширины, так как пропуски делались вручную.
Пробелы в ручном наборе
Когда подвижность литер появилась (а произошло это с появлением наборных шрифтов), появились соответственно и вопросы — а как же ставить пробелы, чтобы соблюдалась выключка по ширине?
Технология ручного набора такова, что набранная строка полностью зажимается в верстатке и в гранке, и, соответственно, должна иметь ширину, практически точно равную ширине полосы (подробнее с технологией ручного набора можно познакомиться в одноимённой книге М. В. Шульмейстера).
Строка при ручном наборе набиралась из литер (брусков, на торце которых делались выпуклые зеркальные копии букв, отпечатывающиеся на бумаге), а межсловные пробелы создавались с помощью так называемых шпаций — брусков различной толщины, у которых на торце нет печатающей поверхности. Выглядит это примерно вот так. Шпации для каждого кегля шрифта, естественно, выпускались свои, и имели различную ширину. Например, для шрифта кегля 10 пунктов (стандартный кегль для большинства текстовых изданий) выпускались шпации шириной 10, 5, 4, 3, 2 и 1 пункт.
Шпации шириной в кегль назывались кегельными или круглыми. Шпации в половину кегельной назывались полукегельными или полукруглыми. Также существует название «тонкая шпация», под которой понимают шпации толщиной 1—2 пункта для шрифта кегля 8—12 пунктов. То есть, для шрифта кегля 10 пунктов тонкая шпация обычно составляет 2 пункта (соответственно, 1⁄5 кегельной). Однако, в связи с отсутствием точного определения тонкой шпации, в руководствах издателя, редактора и верстальщика обычно говорят не об отбивке на тонкую шпацию, а об отбивке на столько-то пунктов (считая, что кегль шрифта равен 10 пунктам).
Таким образом, нужно понимать, что в зависимости от кегля шрифта доля круглой шпации (треть, четверть и т. п.) может иметь разную ширину в пунктах, и наоборот.
Традиционная ширина межсловного пробела
Итак, разобравшись с тем, что такое круглая и полукруглая шпации, перейдём к принятой в российском наборе ширине собственно межсловного пробела.
Шульмейстер пишет (стр. 94), что при наборе строки между словами ставится полукруглая. Когда строка набрана до конца, в большинстве случаев её ширина оказывается либо меньше, либо больше ширины полосы набора. Поэтому верстальщику приходится изменять ширину пробелов, уменьшая её минимум до 1⁄4 круглой и увеличивая максимум до 3⁄4 круглой (соответственно, при наборе кеглем 10 пунктов межсловные пробелы могут варьироваться от 3 до 7 пунктов). Естественно, бывают нюансы, зависящие от формата издания, но мы их касаться не будем.
Однако, Шульмейстер оговаривается, что сам по себе межсловный пробел в полукруглую великоват, и использование стандартного пробела в 1⁄3 круглой является как более экономичным с точки зрения расхода бумаги, так зачастую и более красивым. Также использование межсловного пробела в полукруглую не рекомендуется для узких шрифтов.
С появлением строкоотливных машин пробелы стали делаться равномерными по ширине в пределах одной строки, а ширина межсловного пробела стала варьироваться около 1⁄3 круглой.
Компьютерный набор и веб-типографика
В настоящее время мы ограничены возможностями используемых шрифтов, и, естественно, набором символов в Unicode. Нужно помнить, что далеко не все шрифты содержат большинство пробельных Unicode-символов.
При переходе к компьютерным системам вёрстки был совершён переход от указания ширины шпаций в пунктах к указанию ширины шпаций в долях круглой, так как шрифты стали легко масштабироваться до любого кегля, а пробельные элементы должны были оставаться пропорциональными кеглю шрифта.
Символы пробела в Unicode
Использование различных пробелов
Поскольку ширина межсловного пробела фиксирована в шрифте и изменяется автоматически при выключке по ширине, использование других пробельных символов в качестве межсловных оправдано только при наборе печатных изданий, и только при наличии глубокого понимания, для чего это делается.
В обычной вёрстке для веба для разделения слов достаточно пользоваться обычными и неразрывными межсловными пробелами.
Вместе тем, по правилам русскоязычной типографики в ряде мест должна использоваться тонкая шпация (точнее, в справочниках написано о двухпунктовой шпации, но мы будем употреблять термин «тонкая шпация» как наиболее соответствующий и с точки зрения устоявшейся терминологии, и с точки зрения внешнего вида строки при наборе).
Основные правила использования пробелов будут описаны ниже, но в целом мы рекомендуем следующий принцип для использования при вёрстке для веба.
Использование только тонкой шпации из всего разнообразия пробельных элементов позволяет, во-первых, сохранить гармоничный вид набранного текста, а во-вторых, не перегружать автора публикации разнообразными правилами употребления шпаций различной дробной ширины.
Обработка пробелов браузерами и поисковиками
При подготовке материала статьи мы провели своеобразный эксперимент на специально подготовленной странице. Яндекс и Google справляются с нестандартными символами хорошо, заменяя при поиске все нестандартные пробельные элементы на обычные (мы считаем, что это — правильное поведение). То есть, они не делают разницы между текстами «два слова», «два слова», «два слова» и т. п.
Основные правила употребления пробелов
Итак, ещё раз подчеркнём, что во всех правилах, перечисленных ниже, тонкая шпация используется только в том случае, когда автор отметает риск использования посетителем сайта браузеров, неверно отображающих тонкую шпацию. К ним относятся некоторые браузеры в *nix (возможно, это связано со встроенными шрифтами), MSIE версии 6.0 и раньше, браузеры для Mac (ими можно пренебречь, так как ошибка рендеринга заключается только в ширине шпации), возможно — некоторые браузеры для мобильных телефонов и КПК.
В том случае, если использование таких браузеров вероятно, мы рекомендуем использовать вместо тонкой шпации обычный или неразрывный межсловный пробелы.
Далее мы опишем те правила расстановки пробелов, которые чаще всего, по нашим наблюдениям, нарушаются при вёрстке текстов. Более подробную информацию о правилах набора текстов можно почерпнуть, например, в «Справочнике издателя и автора» А. Э. Мильчина и Л. К. Чельцовой.
Сокращения и символы
Числа и интервалы
Знаки препинания
Пробел
Материал из WikiPrint
Пробе́л — интервал между буквами, обозначающий границы слов во многих системах письменности. Функционально пробел принадлежит к знакам препинания.
Пробел — сравнительно позднее изобретение. В финикийском и первоначальных вариантах древнееврейского и арамейского пробел не использовался. В греческом письме он используется более тысячи лет. В латинском пробел иногда встречался в древности, потом исчезал и вернулся тоже около тысячи лет назад. В древнейших славянских памятниках пробел также отсутствует (как в глаголице, так и в кириллице); регулярно и в нынешнем смысле используется в кириллице только с XVII века. В арабском письме практически не использовался до XX века. В современном китайском и японском языках пробел также может не использоваться.
Для указания словораздела в письменностях, не имеющих или редко использующих пробелы, применялись и применяются различные приемы, например:
В старинных письменностях пробелами (или иным способом разделения) могли отделяться не отдельные слова, а более крупные единицы текста (словосочетания) или более мелкие (слоги). Слитное и раздельное написание сочетаний полнозначных слов со служебными элементами (предлогами, частицами и т. п.) представляет собой одну из самых сложных для учащихся и нестабильную часть орфографии многих языков, в том числе и русского.
ГОСТ определяет пробел как «литера, воспроизводимая отсутствием начертания».
Содержание
Обычный пробел
Название в Юникоде | Код в Юникоде (шестнадцатеричный) | Код в Юникоде (десятичный) | Выглядит | Мнемокод в HTML 4 |
---|---|---|---|---|
SPACE | 0020 | 0032 | « » |
Правила постановки пробела рядом со знаками препинания
1. В русскоязычном наборе пробел ставится:
2. Однако пробел не ставится:
3. В случае одновременной применимости пунктов 1 и 2 (например, если точка стоит перед закрывающей скобкой, или перед запятой) пробел не ставится.
В некоторых руководствах по типографскому набору также указывается, что пробел не ставится, если тире идёт после точки или запятой, но при работе с большинством современных шрифтов этот совет скорее вреден.
Применение в типографике других стран
В американской типографике (в отличие от британской и австралийской) пробел не ставится до и после длинного тире. («It indicates a sudden break in thought—a parenthetical statement like this one—or an open range.»)
Во французской типографике после открывающей кавычки и перед закрывающей ставится ¼ М-пробела. (« Son explication n’est qu’un mensonge », s’indigna le député.)
Неразрывный пробел
Неразры́вный пробел — элемент компьютерной кодировки текстов, отображающийся внутри строки подобно обычному пробелу, но не позволяющий программам отображения и печати разорвать в этом месте строку. Используется для автоматизации верстки, правила которой предписывают избегать разрыва строк в известных случаях (большей частью для удобочитаемости).
Название в юникоде | Код в юникоде (шестнадцатеричный) | Код в юникоде (десятичный) | Выглядит | Мнемокод в HTML 4 | Пояснения |
---|---|---|---|---|---|
NO-BREAK SPACE | 00A0 | 0160 | « » | non-breaking space |
Применение в компьютерной типографике
Другие пробелы в юникоде
Название в юникоде | Код в юникоде (шестнадцатеричный) | Код в юникоде (десятичный) | Выглядит | Мнемокод в HTML 4 | Пояснения |
---|---|---|---|---|---|
EN QUAD | 2000 | 8192 | « » | ||
EM QUAD | 2001 | 8193 | « » | ||
EN SPACE | 2002 | 8194 | « » | имеет ширину заглавной буквы «N» | |
EM SPACE | 2003 | 8195 | « » | имеет ширину заглавной буквы «M» | |
THREE-PER-EM SPACE | 2004 | 8196 | « » | ближе всех к обычному пробелу, втрое меньше, чем EM-SPACE | |
FOUR-PER-EM SPACE | 2005 | 8197 | « » | в четыре раза меньше, чем EM-SPACE | |
SIX-PER-EM SPACE | 2006 | 8198 | « » | в шесть раз меньше, чем EM-SPACE | |
FIGURE SPACE | 2007 | 8199 | « » | имеет такую же ширину, что и цифра, и предназначен для набора таблиц. Неразрывный. | |
PUNCTUATION SPACE | 2008 | 8200 | « » | ширина равна ширине точки | |
THIN SPACE | 2009 | 8201 | « » | тонкий пробел, примерно равный SIX-PER-EM SPACE | |
HAIR SPACE | 200A | 8202 | « » | самый тонкий пробел, соответствует самой тонкой шпации в кассе наборщика | |
ZERO-WIDTH SPACE | 200B | 8203 | «» | показывает места, в которых можно разрывать строку, не добавляя знак переноса; ширина его нулевая. Применяется в языках, в которых пробелов нет. При выравнивании текста по ширине может расширяться, как и любой другой пробел. | |
NARROW NO-BREAK SPACE | 202F | 8239 | « » | узкий неразрывный пробел | |
MEDIUM MATHEMATICAL SPACE | 205F | 8237 | «» | узкий пробел, применяемый в математических формулах | |
WORD JOINER | 2060 | 8288 | «» | аналогичен ZERO-WIDTH SPACE, но неразрывный | |
IDEOGRAPHIC SPACE | 3000 | 12288 | « » | используется в восточных языках, равняется ширине одного иероглифа. См. CJK |
Пробел при типографском наборе
При типографском наборе пробелы между словами не имели фиксированной ширины. Для книжных изданий традиционно применяются следующие правила.
Без шпаций набираются такие комбинации:
С 2-пунктовыми шпациями набираются такие комбинации:
С 3-пунктовыми шпациями набираются такие комбинации:
С полукегельными шпациями такие комбинации:
Запрещается перенос таких комбинаций:
В связи с ограниченностью возможностей компьютерных программ (В настоящее время практически все издательские и офисные программы имеют поддержку Unicode, за счет которой ограничения снимаются.) и различиями в традициях типографского набора разных стран в компьютерном наборе de facto используются упрощённые правила. При этом для предотвращения переноса текста зачастую используется «неразры́вный» пробел. Современные издательские программы имеют встроенные средства автоматизации, и на их основе существуют готовые решения, позволяющие без существенных затрат труда и времени расставлять в наборе пробелы, предусмотренные полной версией правил.
Пробел в HTML
Бывают случаи, когда не хочется менять стили ради какого-то одного элемента, или необходимо вставить несколько пробелов в тексте из соображений эстетики или стилистики форматирования текста. И тут встает вопрос: «Как сделать пробел в HTML, чтобы текст красиво отображался, и при этом избежать избыточности кода?» Для этого рассмотрим виды пробелов и примеры их использования в HTML-коде.
Неразрывный пробел HTML
В случаях, когда нужно не отрывать части текста друг от друга, поможет неразрывный пробел, код которого выглядит следующим образом:
Это так называемый, «non breaking space».
Примеры использования неразрывного пробела:
Тонкий пробел
Код пробела HTML, который мы рассмотрели выше, является повсеместным. Но бывают случаи, когда обычный пробел оказывается слишком «большим». Тогда на смену ему приходит тонкий пробел. Это пробел, ширина которого составляет четверть кегля используемого шрифта. Обозначается тонкий пробел следующим образом:
и используется, по большей части, для разбиения разрядов чисел, например, «15 000 000 долларов» стоит записать так:
Примечание: Тонкий пробел может некорректно отображаться в старых версиях некоторых из браузеров, но во всех последних версиях работает на «ура».
Другие типы пробелов в языке HTML
Помимо наиболее актуальных видов, что мы рассмотрели выше, существуют и другие.
Примечание: Если вам нужно поставить несколько пробелов подряд, обрамите текст тегом
Пробел при помощи CSS
Вариант создания табуляции (отступа) с помощью CSS можно решить с помощью следующего приёма:
Юникод для чайников
Сам я не очень люблю заголовки вроде «Покемоны в собственном соку для чайников\кастрюль\сковородок», но это кажется именно тот случай — говорить будем о базовых вещах, работа с которыми довольно часто приводить к купе набитых шишек и уйме потерянного времени вокруг вопроса — «Почему же оно не работает?». Если вы до сих пор боитесь и\или не понимаете Юникода — прошу под кат.
Зачем?
Главный вопрос новичка, который встречается с впечатляющим количеством кодировок и на первый взгляд запутанными механизмами работы с ними (например, в Python 2.x). Краткий ответ — потому что так сложилось 🙂
Кодировкой, кто не знает, называют способ представления в памяти компьютера (читай — в нулях-единицах\числах) цифр, буков и всех остальных знаков. Например, пробел представляется как 0b100000 (в двоичной), 32 (в десятичной) или 0x20 (в шестнадцатеричной системе счисления).
Так вот, когда-то памяти было совсем немного и всем компьютерам было достаточно 7 бит для представления всех нужных символов (цифры, строчный\прописной латинский алфавит, куча знаков и так называемые управляемые символы — все возможные 127 номеров были кому-то отданы). Кодировка в это время была одна — ASCII. Шло время, все были счастливы, а кто не был счастлив (читай — кому не хватало знака «©» или родной буквы «щ») — использовали оставшиеся 128 знаков на свое усмотрение, то есть создавали новые кодировки. Так появились и ISO-8859-1, и наши (то есть кириличные) cp1251 и KOI8. Вместе с ними появилась и проблема интерпретации байтов типа 0b1******* (то есть символов\чисел от 128 и до 255) — например, 0b11011111 в кодировке cp1251 это наша родная «Я», в тоже время в кодировке ISO-8859-1 это греческая немецкая Eszett (подсказывает Moonrise) «ß». Ожидаемо, сетевая коммуникация и просто обмен файлами между разными компьютерами превратились в чёрт-знает-что, несмотря на то, что заголовки типа ‘Content-Encoding’ в HTTP протоколе, email-письмах и HTML-страницах немного спасали ситуацию.
В этот момент собрались светлые умы и предложили новый стандарт — Unicode. Это именно стандарт, а не кодировка — сам по себе Юникод не определяет, как символы будут сохранятся на жестком диске или передаваться по сети. Он лишь определяет связь между символом и некоторым числом, а формат, согласно с которым эти числа будут превращаться в байты, определяется Юникод-кодировками (например, UTF-8 или UTF-16). На данный момент в Юникод-стандарте есть немного более 100 тысяч символов, тогда как UTF-16 позволяет поддерживать более одного миллиона (UTF-8 — и того больше).
Ближе к делу!
Естественно, есть поддержка Юникода и в Пайтоне. Но, к сожалению, только в Python 3 все строки стали юникодом, и новичкам приходиться убиваться об ошибки типа:
Давайте разберемся, но по порядку.
Зачем кто-то использует Юникод?
Почему мой любимый html-парсер возвращает Юникод? Пусть возвращает обычную строку, а я там уже с ней разберусь! Верно? Не совсем. Хотя каждый из существующих в Юникоде символов и можно (наверное) представить в некоторой однобайтовой кодировке (ISO-8859-1, cp1251 и другие называют однобайтовыми, поскольку любой символ они кодируют ровно в один байт), но что делать если в строке должны быть символы с разных кодировок? Присваивать отдельную кодировку каждому символу? Нет, конечно, надо использовать Юникод.
Зачем нам новый тип «unicode»?
Вот мы и добрались до самого интересного. Что такое строка в Python 2.x? Это просто байты. Просто бинарные данные, которые могут быть чем-угодно. На самом деле, когда мы пишем что-нибудь вроде:интерпретатор не создает переменную, которая содержит первые четыре буквы латинского алфавита, но только последовательность с четырёх байт, и латинские буквы здесь используются исключительно для обозначения именно этого значения байта. То есть ‘a’ здесь просто синоним для написания ‘\x61’, и ни чуточку больше. Например:
И ответ на вопрос — зачем нам «unicode» уже более очевиден — нужен тип, который будет представятся символами, а не байтами.
Хорошо, я понял чем есть строка. Тогда что такое Юникод в Пайтоне?
«type unicode» — это прежде всего абстракция, которая реализует идею Юникода (набор символов и связанных с ними чисел). Объект типа «unicode» — это уже не последовательность байт, но последовательность собственно символов без какого либо представления о том, как эти символы эффективно сохранить в памяти компьютера. Если хотите — это более высокой уровень абстракции, чем байтовый строки (именно так в Python 3 называют обычные строки, которые используются в Python 2.6).
Как пользоваться Юникодом?
Как из юникод-строки получить обычную? Закодировать её:
Алгоритм кодирования естественно обратный приведенному выше.
Не кодируется 🙁
Разберем примеры с начала статьи. Как работает конкатенация строки и юникод-строки? Простая строка должна быть превращена в юникод-строку, и поскольку интерпретатор не знает кодировки, от использует кодировку по умолчанию — ascii. Если этой кодировке не удастся декодировать строку, получим некрасивую ошибку. В таком случае нам нужно самим привести строку к юникод-строке, используя правильную кодировку:
«UnicodeDecodeError» обычно есть свидетельством того, что нужно декодировать строку в юникод, используя правильную кодировку.
Теперь использование «str» и юникод-строк. Не используйте «str» и юникод строки 🙂 В «str» нет возможности указать кодировку, соответственно кодировка по умолчанию будет использоваться всегда и любые символы > 128 будут приводить к ошибке. Используйте метод «encode»:
«UnicodeEncodeError» — знак того, что нам нужно указать правильную кодировку во время превращения юникод-строки в обычную (или использовать второй параметр ‘ignore’\’replace’\’xmlcharrefreplace’ в методе «encode»).
Хочу ещё!
Хорошо, используем бабу-ягу из примера выше ещё раз:
Есть ещё способ использования «u»» для представления, например, кириллицы, и при этом не указывать кодировку или нечитабельные юникод-поинты (то есть «u’\u1234’»). Способ не совсем удобный, но интересный — использовать unicode entity codes:
Ну и вроде всё. Основные советы — не путать «encode»\«decode» и понимать различия между байтами и символами.
Python 3
Здесь без кода, ибо опыта нет. Свидетели утверждают, что там всё значительно проще и веселее. Кто возьмется на кошках продемонстрировать различия между здесь (Python 2.x) и там (Python 3.x) — респект и уважуха.
Полезно
Раз уж мы о кодировках, порекомендую ресурс, который время-от-времени помогает побороть кракозябры — http://2cyr.com/decode/?lang=ru.
Unicode HOWTO — официальный документ о том где, как и зачем Юникод в Python 2.x.
Спасибо за внимание. Буду благодарен за замечания в приват.