Все символы Whitespace? Является ли он независимым от языка?

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

Может ли кто-нибудь предоставить полный список символов пробела, разделяющих тот, который можно ввести с клавиатуры? Если это будет отличаться, разница и причина будут более уместными. Любой язык полезен, если вы не выведете Whitespace или его варианты (если есть). Я, конечно, не хочу полный список для языка, например Whitespace:)

Ответ 1

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

В большинстве современных языков используется набор символов Unicode, который имеет определение для символов разделителя пробелов. Любой символ категории Zs является разделителем пространства.

Здесь вы можете увидеть полный список. Кроме того, вы можете grep для ;Zs; в официальной Unicode Character Database, чтобы увидеть эти символы. Обратите внимание, что количество символов в этой категории может увеличиваться по мере появления новых версий Unicode, поэтому я не буду говорить, сколько таких символов существует, и даже не пытайтесь их перечислить.

Помимо категории Zs Unicode, Unicode также определяет свойства символа. Среди свойств, определенных Unicode, является свойство Whitespace. Начиная с Unicode 7.0, символы с этим свойством включают в себя все символы категории Zs плюс несколько управляющих символов (включая U + 0009, U + 000A, U + 000B, U + 000C, U + 000D и U + 0085). Вы можете найти все символы со свойством whitespace на Unicode.org здесь.

Теперь многие языки, даже современные, имеют специальные символы для регулярных выражений, таких как \s или [:space:], но будьте осторожны, они относятся только к определенным символам из набора ASCII; обычно они ограничены

  • ПРОСТРАНСТВО (код 32, U + 0020)
  • TAB (код 9, U + 0009)
  • LINE FEED (код 10, U + 000A)
  • LINE TABULATION (код 11, U + 000B)
  • FORM FEED (код 12, U + 000C)
  • ВОЗВРАТ ПЕРЕВОЗКИ (код 13, U + 000D)

Теперь этот список интересен тем, что содержит не только разделители пробелов (Zs), но также и из категории "Управление, другое" (Cc). Это то, что обычно означает язык программирования, когда он использует термин "пробелы".

Поэтому, вероятно, лучший способ ответить на ваш вопрос для "полного списка" пробельных символов - сказать "это зависит от того, что вы имеете в виду". Если вы имеете в виду "классические пробелы", это, вероятно, шесть символов, перечисленных выше. Если вы хотите что-то более "современное", то это объединение этих шести со всеми персонажами из категории Юникод Zs. Опять же, вам, возможно, придется искать и другие блоки (например, U + 1361, как упоминалось в комментарии к вашему вопросу Джерри Коффина). Это также зависит от того, что вы намерены делать с этими пробелами.

Теперь последнее: Unicode не имеет всех персонажей в мире; он продолжает расти. Возможно, что когда-нибудь будут добавлены новые пробелы. На данный момент категория Zs + классики - ваш лучший выбор.

Ответ 2

В настоящее время существует 25 символов пробела Unicode со следующими шестнадцатеричными "кодовыми точками":

9, A, B, C, D, 20, 85, A0,
1680, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
2007, 2008, 2009, 200A, 2028, 2029, 202F, 205F,
3000

Соответствующие десятичные значения:

9, 10, 11, 12, 13, 32, 133, 160,
5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198,
8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287,
12288

Первоначально я получил эту информацию с Unicode.org, но моя старая ссылка больше не работает. В Википедии есть хорошая страница на эту тему, на https://en.wikipedia.org/wiki/Whitespace_character, если есть интерес, которая также дает 25 символов. (Я не имел перекрестных ссылок на то, что эти символы являются одними и теми же символами, но я верю, что Консорциум Unicode не сделал такого серьезного изменения в своем наборе символов!)

Сегодня я нашел одну простую страницу на веб-сайте Unicode, но она больше похожа на черновую HTML-страницу, чем на какую-либо поддержку или утверждение официальной позиции. Но это совпадает с тем, что Unicode ранее опубликовал в качестве официального заявления о том, каковы все их пробельные символы. (Ссылка в моем комментарии ниже моего ответа.)

Ответ 3

Если вы ищете эффективный метод, я использую следующий код:

(c <= 32 && c >= 0) || c == 127;

От 0 до 31 - управляющие символы, 32 - символ SPACE, а 127 - символ ESC. Это работает для всех наборов символов, которые я знаю, включая UTF-8.