Открыть сервисСервис

Пробел в Unicode

Пробел — управляющий символ, используемый для разделения слов и отступов в тексте; в стандарте Unicode ему соответствует несколько отдельных кодовых точек, из которых основной является U+0020 (SPACE). Пробел относится к категории управляющих символов (Zs — Separator, space) и занимает в таблицах Unicode отдельную группу разделителей. Таким образом, пробел действительно является символом в Unicode, однако это не один символ, а целое семейство кодовых точек с разным поведением.

Основные символы пробела в Unicode

Стандарт Unicode предусматривает несколько видов пробелов, отличающихся назначением и визуальной шириной:

НазваниеКодовая точкаКатегорияОписание
SPACE (обычный пробел)U+0020ZsОсновной пробел, разделяющий слова
NO-BREAK SPACE (неразрывный пробел)U+00A0ZsНе допускает переноса строки между словами
EN QUADU+2000ZsШирина равна ширине цифры «en»
EM QUADU+2001ZsШирина равна ширине эм-квадрата
EN SPACEU+2002ZsШирина «en»
EM SPACEU+2003ZsШирина «em»
THREE-PER-EM SPACEU+2004ZsТри пробела на ширину «em»
FOUR-PER-EM SPACEU+2005ZsЧетыре пробела на ширину «em»
SIX-PER-EM SPACEU+2006ZsШесть пробелов на ширину «em»
FIGURE SPACEU+2007ZsШирина цифры
PUNCTUATION SPACEU+2008ZsШирина знака препинания
THIN SPACEU+2009ZsУзкий пробел (¼ эм)
HAIR SPACEU+200AZsВолосяной пробел (⅛ эм)
NARROW NO-BREAK SPACEU+202FZsУзкий неразрывный пробел
MEDIUM MATHEMATICAL SPACEU+205FZsМатематический пробел
IDEOGRAPHIC SPACEU+3000ZsШирина иероглифа (используется в CJK)

Все перечисленные символы относятся к категории Zs и визуально отображаются как пустое пространство, но для компьютера это разные символы с разными номерами.

Кодировка UTF-8

В кодировке UTF-8 обычный пробел U+0020 занимает один байт со значением 0x20 (32 в десятичной записи). Это совпадает с позицией пробела в ASCII, поэтому UTF-8 является обратно совместимым с этой кодировкой. Неразрывный пробел U+00A0 в UTF-8 кодируется двумя байтами: 0xC2 0xA0. Широкие пробелы из блока General Punctuation (U+2000–U+200A) кодируются тремя байтами вида 0xE2 0x80 0xNN.

Пробел в других кодировках

До распространения Unicode тексты в русскоязычной среде кодировались в стандартах KOI-8-R, Windows-1251 и ISO 8859-5. Во всех этих однобайтовых кодировках позиция 0x20 отведена обычному пробелу, что обеспечивало совместимость с ASCII. Неразрывный пробел в Windows-1251 имеет код 0xA0, в KOI-8-R — 0xA0, что совпадает с позицией в Latin-1.

Технические особенности

Обработка в программировании

Множество языков программирования и библиотек предоставляют отдельные функции для работы с пробелами. В Python, например, метод str.isspace() возвращает True для всех символов категории Zs, а не только для U+0020. Регулярные выражения в синтаксисе Perl используют конструкцию \s, которая по умолчанию сопоставляется с пробелом, табуляцией, переводом строки и рядом Unicode-разделителей.

Пробел в формате JSON

Согласно спецификации JSON (RFC 8259), структурные символы могут разделяться пробелами, табуляцией, переводами строк и carriage return. Неразрывный пробел U+00A0 формально не входит в этот список, хотя некоторые парсеры принимают его как валидный разделитель.

Пробел в URL

В URL-адресах обычный пробел не допускается и должен кодироваться как %20 или как плюс + в компоненте query. Неразрывный пробел также требует процентного кодирования.

Применение неразрывного пробела

Неразрывный пробел U+00A0 применяется в типографике для предотвращения переноса строки между элементами, которые должны оставаться вместе: между числом и единицей измерения, между инициалами и фамилией, перед знаками препинания «?», «!», «:» в ряде языковых традиций. В текстовых редакторах вроде Microsoft Word и LibreOffice неразрывный пробел вставляется сочетанием клавиш Ctrl+Shift+Space.

Пробел и сортировка

В Unicode-сортировке (алгоритм UCA, Unicode Collation Algorithm) пробел обычно игнорируется или имеет очень низкий вес, что позволяет сравнивать строки без учёта пробельных различий. Однако точное поведение зависит от настроек локали и используемого уровня сопоставления.

Источники:

  • The Unicode Standard, Version 15.0 — Chapter 2. General Structure
  • Unicode Character Database — Category Zs (Separator, space)
  • RFC 8259 — The JavaScript Object Notation (JSON) Data Interchange Format
  • RFC 3629 — UTF-8, a transformation format of ISO 10646
  • ГОСТ Р ИСО/МЭК 10646 — Информационные технологии. Универсальный набор символов
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru