Почему "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
)? Просто потому, что вот так монета перевернулась:-)