Что подразумевается под обозначением "U+" при обсуждении кодировки Unicode?
Я понимаю, что это довольно просто, так как я читаю об Unicode в Википедии и везде, куда она указывает. но эта семантика "U+0000" не полностью объяснена. мне кажется, что "U" всегда равно 0.
почему это U + часть обозначения? что именно это значит? (кажется, что это какое-то базовое значение, но я не могу понять, когда или почему оно всегда ненулевое.)
Кроме того, если я получаю строку текста из какого-либо другого источника, как я узнаю, что эта строка закодирована в формате UTF-8 или UTF-16 или UTF-32? Есть ли способ, которым я могу автоматически определить это по контексту?
1 ответ
Из Википедии, статья Юникод, раздел Архитектура и терминология:
Unicode определяет кодовое пространство из 1,114,112 кодовых точек в диапазоне от 0 до 10FFFF (шестнадцатеричное). Обычно кодовая точка Unicode упоминается как "U+", за которой следует шестнадцатеричное число. Для кодовых точек в базовой многоязычной плоскости (BMP) используются четыре цифры (например, U+0058 для символа LATIN CAPITAL LETTER X); для кодовых точек вне BMP используются пять или шесть цифр.
Это соглашение было введено для того, чтобы читатели понимали, что кодовая точка - это, в частности, кодовая точка Unicode. Например, письмо
ă
(ЛАТИНСКОЕ МАЛЕНЬКОЕ ПИСЬМО А С ПЕРИВОМ) - U+0103 в кодовой странице 852 он имеет код 0xC7, в кодовой странице 1250 он имеет код 0xE3, но когда я пишу U+0103, все понимают, что я имею в виду кодовую точку Unicode, и они могут ее найти.Для языков, написанных с использованием латинского алфавита, строки UTF-16 и UTF-32, скорее всего, будут содержать множество байтов со значением 0, которые не должны появляться в строках в кодировке UTF-8. Посмотрев, какие байты равны нулю, вы также можете определить порядок байтов строк UTF-16 и UTF-32 даже в отсутствие метки порядка байтов.
Так, например, если вы получаете байты
0xC3 0x89 0x70 0xC3 0xA9 0x65
это наиболее вероятно
Épée
в кодировке UTF-8. В младшем порядке UTF-16 это будет0x00 0xC9 0x00 0x70 0x00 0xE9 0x00 0x65
(Обратите внимание, что каждый четный байт равен нулю.)