Чому кодові точки Unicode відображаються як ?U+
<codepoint>
Наприклад, U+2202
представляє символ ∂ .
Чому ні U-
(тире чи дефіс) чи щось інше?
Відповіді:
Символи “U +” - це ASCIIfied версія MULTISET UNION “⊎” символу U + 228E (U-подібний символ об'єднання зі знаком плюс всередині), який повинен був символізувати Unicode як об'єднання наборів символів. Див . Пояснення Кеннета Вістлера у списку розсилки Unicode .
Стандарт Unicode потребує деяких позначень для розмови про кодові точки та імена символів. Він прийняв конвенцію "U +", за якою слідують чотири або більше шістнадцяткові цифри, принаймні ще до стандарту Unicode , версія 2.0.0 , опублікованого в 1996 році (джерело: заархівована копія PDF на веб-сайті Консорціуму Unicode).
Позначення "U +" є корисним. Це дає можливість позначити шістнадцяткові цифри як кодові коди Юнікоду, замість октетів, необмежених 16-бітових величин або символів в інших кодуваннях. Це добре працює у запущеному тексті. "U" пропонує "Unicode".
Я особисто згадую про обговорення в галузі програмного забезпечення на початку 1990-х років про Unicode, що домовленість "U +", за якою слідували чотири шістнадцяткові цифри, була поширеною під час епохи Unicode 1.0 і Unicode 2.0. На той час 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 +" із чотирма цифрами в деяких місцях, а з шести цифрами в інших місцях. Найтвердіший слід, який я знайшов, був у Unicode Standard , версія 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
)? Просто тому, що так монета перевернута :-)
x
( /ˈɛks/
) звучить більше, hex
ніж h
( /eɪtʃ/
).
&hB9
Паскаль, використовує $B9
збірку синтаксису Intel0B9h