Почему "U+" используется для обозначения кодовой точки Unicode?

Почему кодовые точки Unicode отображаются как U+<codepoint>?

Например, U+2202 представляет символ .

Почему бы и нет U- (тире или дефис) или что-нибудь еще?

4 ответа

Решение

Символы "U+" являются версией ASCII-версии MULTISET UNION "⊎" символа U+228E (U-подобный символ объединения со знаком плюс внутри), который должен был символизировать Unicode как объединение наборов символов. См . Объяснение Кеннета Уистлера в списке рассылки Unicode.

Стандарт Юникода нуждается в некоторой нотации для разговора о кодовых точках и именах символов. Он принял соглашение "U+", за которым следуют четыре или более шестнадцатеричных цифры, по крайней мере, еще в то время, как стандарт Unicode, версия 2.0.0, опубликованный в 1996 году (источник: архивная копия PDF на веб-сайте Консорциума Unicode).

Запись "U+" полезна. Он позволяет помечать шестнадцатеричные цифры как кодовые точки Unicode вместо октетов, неограниченных 16-битных величин или символов в других кодировках. Хорошо работает при запуске текста. "U" предлагает "Unicode".

Мое личное воспоминание из дискуссий индустрии Unicode в начале 1990-х о том, что в эпоху Unicode 1.0 и Unicode 2.0 было распространено соглашение "U+", за которым следовали четыре шестнадцатеричных цифры. В то время Unicode рассматривался как 16-битная система. С появлением Unicode 3.0 и кодированием символов в кодовых точках U+010000 и выше, вошло соглашение "U-", за которым следуют шесть шестнадцатеричных цифр, в частности, чтобы выделить две дополнительные цифры в числе. (Или, может быть, это был наоборот, переход от "U-" к "U+".) По моему опыту, соглашение "U+" теперь намного более распространено, чем "U-", и мало кто использует Разница между "U+" и "U-" для обозначения количества цифр.

Однако я не смог найти документацию о переходе с "U+" на "U-". Архивные сообщения списка рассылки 1990-х годов должны иметь доказательства этого, но я не могу удобно указать на них. В стандарте Unicode 2.0 объявлено: "Коды символов Unicode имеют одинаковую ширину 16 битов". (с. 2-3). Он установил соглашение, согласно которому "индивидуальное значение Unicode выражается как U + nnnn, где nnnn - это четырехзначное число в шестнадцатеричной записи" (стр. 1-5). Суррогатные значения были распределены, но не были определены коды символов выше U+FFFF, и не было упоминания о UTF-16 или UTF-32. Он использовал "U+" с четырьмя цифрами. Стандарт Unicode 3.0.0, опубликованный в 2000 году, определил UTF-16 (стр. 46-47) и обсудил кодовые точки U+010000 и выше. Он использовал "U+" с четырьмя цифрами в некоторых местах и ​​с шестью цифрами в других местах. Самая надежная трассировка, которую я нашел, была в Стандарте Юникод, версия 6.0.0, где таблица синтаксической нотации BNF определяет символы U+HHHH а также U-HHHHHHHH (с. 559).

Нотация "U+" - не единственное соглашение для представления кодовых точек Unicode или кодовых единиц. Например, язык Python определяет следующие строковые литералы:

  • u'xyz' чтобы указать строку Unicode, последовательность символов Unicode
  • '\uxxxx' чтобы указать строку с символом Unicode, обозначенным четырьмя шестнадцатеричными цифрами
  • '\Uxxxxxxxx' для обозначения строки с символом Unicode, обозначенным восемью шестнадцатеричными цифрами

Это зависит от того, о какой версии стандарта Unicode вы говорите. Из Википедии:

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

Это просто соглашение, чтобы показать, что значением является Unicode. Немного похоже на '0x' или 'h' для шестнадцатеричных значений (0xB9 или же B9h). Зачем 0xB9 и не 0hB9 (или же &hB9 или же $B9)? Просто потому, что вот так монета перевернулась:-)

Другие вопросы по тегам