Кратко о кодировании битов в utf8
Запись от mr_dramm размещена 26.12.2023 в 20:16
Показов 1673
Комментарии 0
Метки javascript, unicode
|
utf8 - стандарт кодирования символов, позволяющий более компактно хранить и передавать символы Юникода, используя переменное количество байт (от 1 до 4), и обеспечивающий полную обратную совместимость с 7-битной кодировкой ASCII. рассмотрим, как распределяются биты в символах от 1 до 4х байт. для этого воспользуемся таблицей Table 3-6. UTF-8 Bit Distribution это основной стандарт и там ее можно найти странице 125 или через поиск. Я ее немного дополнил значениями в десятичной и шестнадцатеричной системе и посчитал сколько старших символов и полезных символов для кодирования символа. В документации первые биты называются first second third fourth я их просто назвал major для упрощения, они нужны чтобы не допускать ошибок кодирования символов, code bit - это сколько битов остается на кодирование конкретного символа. Также код символа там называется кодпоинт — codepoint, кодовая точка — в контексте кодирования символов — числовое значение, соответствующее определенному символу. - 1 byte: codepoint<128 bin 0_xxxxxxx hex 7F major bits 1 + 7 code bit - Латинские символы и спец символы control Остальные интернациальные кодировки и спец символы - 2 byte: dec 128<codepoint<2048 bin 110_xxxxx 10_xxxxxx hex max 7FF major bits 5 + 11 code bit - 3 byte: dec 2048<codepoint<65536 bin 1110_xxxx 10_xxxxxx 10_xxxxxx hex max FFFF major bits 8 + 16 code bit Эмоджи и спецсимволы - 4 byte: dec 65536<codepoint<2097151 bin 11110_xxx 10_xxxxxx 10_xxxxxx 10_xxxxxx hex max 1FFFFF major bits 11 + 21 code bit тут можно посмотреть код каждого символа, очень удобно Теперь перейдем у практической части рассмотрим пример кодирования и декодирования буквы "Ц" Из описания выше должно стать понятно, как определить сколько этот символ занимает байт. Для этого мы получаем код символа
Когда выполняется декодирование старшие биты удаляются
Eva Rosalene, предложила очень простое рабочее решение ![]()
Этот пример очень хорошо демонстрирует зачем нужны major биты в начале каждого байта, о которых писалось ранее. - 1 byte: codepoint<128 bin 0_xxxxxxx hex 7F major bits 1 + 7 code bit - Латинские символы и спец символы control Остальные интернациальные кодировки и спец символы - 2 byte: dec 128<codepoint<2048 bin 110_xxxxx 10_xxxxxx hex max 7FF major bits 5 + 11 code bit - 3 byte: dec 2048<codepoint<65536 bin 1110_xxxx 10_xxxxxx 10_xxxxxx hex max FFFF major bits 8 + 16 code bit Эмоджи и спецсимволы - 4 byte: dec 65536<codepoint<2097151 bin 11110_xxx 10_xxxxxx 10_xxxxxx 10_xxxxxx hex max 1FFFFF major bits 11 + 21 code bit В Uint8Array байты хранятся непрерывной последовательностью, но TextDecoder справился понял какие символы состоят из одного байта и какие из двух Для Node js вместо TextEncoder может быть использован метод toString встроенного объекта Buffer
| ||||||||||||||||||||||||||
Метки javascript, unicode
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии



