Вопрос

Стандарт unicode содержит достаточно кодовых точек, чтобы вам потребовалось 4 байта для их хранения.Это то, что делает кодировка UTF-32.Тем не менее, кодировка UTF-8 каким-то образом втискивает их в гораздо меньшие пространства, используя нечто, называемое "кодирование переменной ширины".

Фактически, ему удается представить первые 127 символов US-ASCII всего в одном байте, который выглядит в точности как настоящий ASCII, поэтому вы можете интерпретировать большое количество текста ascii так, как если бы это был UTF-8, ничего с ним не делая.Ловкий трюк.Итак, как же это работает?

Я собираюсь задать здесь свой собственный вопрос и ответить на него, потому что я просто немного почитал, чтобы разобраться в нем, и подумал, что это может сэкономить кому-то еще немного времени.Плюс, может быть, кто-нибудь сможет поправить меня, если я что-то напутал.

Это было полезно?

Решение

Каждый байт начинается с нескольких битов, которые сообщают вам, является ли это однобайтовой кодовой точкой, многобайтовой кодовой точкой или продолжением многобайтовой кодовой точки.Вот так:

0xxx xxxx    A single-byte US-ASCII code (from the first 127 characters)

Каждая из многобайтовых кодовых точек начинается с нескольких битов, которые по сути говорят: "эй, тебе нужно также прочитать следующий байт (или два, или три), чтобы выяснить, кто я такой". Это:

110x xxxx    One more byte follows
1110 xxxx    Two more bytes follow
1111 0xxx    Three more bytes follow

Наконец, все байты, которые следуют за этими начальными кодами, выглядят следующим образом:

10xx xxxx    A continuation of one of the multi-byte characters

Поскольку вы можете определить, на какой байт вы смотрите, по первым нескольким битам, то даже если где-то что-то будет искажено, вы не потеряете всю последовательность.

Другие советы

RFC3629 - UTF-8, формат преобразования ISO 10646 является здесь окончательным авторитетом и имеет все объяснения.

Короче говоря, несколько битов в каждом байте последовательности от 1 до 4 байт в кодировке UTF-8, представляющей один символ, используются для указания, является ли это завершающим байтом, начальным байтом, и если да, то сколько байтов следует за ним.Остальные биты содержат полезную нагрузку.

UTF-8 был другой системой для хранения вашей строки кодовых точек Unicode, этих магических чисел U +, в памяти используя 8-битные байты.В UTF-8 каждая кодовая точка из 0-127 хранится в одном байте.Только кодовые точки 128 и выше хранятся с использованием 2, фактически 3, до 6 байт.

Отрывок из Абсолютный минимум, который абсолютно, положительно должен знать каждый разработчик программного обеспечения О Unicode и наборах символов (никаких оправданий!).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top