что подразумевается под обозначением «U +» при обсуждении кодировки Unicode? - PullRequest
0 голосов
/ 23 мая 2018

Я понимаю, что это довольно просто, так как я читаю об Unicode в Википедии и везде, куда она указывает.но эта семантика "U + 0000" не полностью объяснена.мне кажется, что "U" всегда равно 0.

, почему это "U +" часть обозначения?что именно это значит?(Кажется, что это какое-то базовое значение, но я не могу понять, когда или почему оно когда-либо не равно нулю.)

также, если я получаю строку текста из какого-то другого источника, как я узнаю, что этострока в кодировке UTF-8 или UTF-16 или UTF-32?Есть ли способ, которым я могу автоматически определить это по контексту?

1 Ответ

0 голосов
/ 23 мая 2018
  1. Из Википедии, статья Юникод , раздел Архитектура и терминология :

    Юникод определяет кодовое пространство из 1114,112 кодовых точек вдиапазон от 0 до 10FFFF (шестнадцатеричный).Обычно кодовая точка Unicode упоминается как «U +», за которой следует шестнадцатеричное число.Для кодовых точек в базовой многоязычной плоскости (BMP) используются четыре цифры (например, U + 0058 для символа LATIN CAPITAL LETTER X);для кодовых точек вне BMP используются пять или шесть цифр.

    Это соглашение было введено таким образом, чтобы читатели поняли, что кодовая точка является конкретно Unicode кодовой точкой.Например, буква ă (ЛАТИНСКОЕ МАЛЕНЬКОЕ ПИСЬМО А С ВЫЗЫВОМ) - U + 0103;в кодовой странице 852 он имеет код 0xC7, в кодовой странице 1250 он имеет код 0xE3, но когда я пишу U + 0103, все понимают, что я имею в виду кодовую точку Unicode, и они могут ее искать.

  2. Для языков, написанных с использованием латинского алфавита, строки 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
    

    (обратите внимание, что каждый четный байт равен нулю.)

...