2015-10-29 2 views
0

Из моего понимания и того, что я читал по сети, UTF-8 может использовать 1-4 кодовых блока (каждый побайтно в длину) для кодирования всех символов из набора символов Юникода. Мне интересно, так как все кодовые точки в Юникоде могут быть представлены в 21 бит, когда вы используете 4 блока кода, а не 3?В каких обстоятельствах в кодировке UTF-8 потребуется 32 бита?

Вам нужно всего лишь 24 бита для представления любого символа Юникода, поэтому, когда вы будете использовать 32 бита в кодировке UTF-8 и почему? Нужны ли дополнительные бит для хранения дополнительных данных?

ответ

4

Кодировка UTF-8 имеет накладные расходы. Первый байт использует 1-5 бит, чтобы указать, сколько дополнительных байтов используется, и каждый дополнительный байт использует 2 бита в качестве маркера байта продолжения. Таким образом, четырехбайтовая последовательность UTF-8 требует 5 бит служебных данных для первого байта и 2 бита служебных данных на каждый байт для остальных 3 байтов, оставляя 21 бит для кодирования кодовой точки.

1 байт UTF-8, 7 битов данных (U + 0000 до U + 007F): 0xxxxxxx
2 байта в UTF-8, 11 бит данных (U + 0080 до U + 07FF): 110xxxxx 10xxxxxx
3 байта UTF-8, 16 бит данных (U + 0800 до U + FFFF): 1110xxxx 10xxxxxx 10xxxxxx
4 байта в UTF-8, 21 бит данных (U + 10000 до U + 10FFFF): 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Ref: UTF-8

Смежные вопросы