• UTF-8 - для чего нужен 0 после единиц в ведущем байте?

    @galaxy
    Для чего нужен 0, если теоретически единиц достаточно для определения границ символа?

    Для удобства. По стартовому байту последовательности (кодирующей символ) можно определить ее длину в байтах: сколько единичных страших битов, столько и байт в последовательности. Ноль обозначает конец серии единичных старших бит. Если бы не было этого нуля, невозможно было бы сказать, сколько старших бит установлено в стартовом байте (пришлось бы считывать байты дальше до тех пор, пока не встретится следующий стартовый байт или однобайтовый символ).
    Т.е. допустим, вы видите такую последовательность (второй байт просто для иллюстрации, внимание на первый):
    11110001 10xxxxxx
    Если нуля бы не было, то это два байта, кодирующие символ Юникода 110001xxxxxx? Или это три байта, кодирующие символ 1001xxxxxx...? Или четыре, символ 001xxxxxx...?
    Не получится понять, не считав до начала следующего символа.
    Ответ написан
    Комментировать