Что означает «старший бит» или «старший бит» в байте? - PullRequest
0 голосов
/ 18 сентября 2018

Я по профессии разработчик PHP.

Рассмотрим следующий текст, касающийся UTF-8 стандарта кодирования:

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

Также рассмотрим ниже UTF-8 и UTF-16 пример кодирования:

あ UTF-8 Кодированная строка байтов: 11100011 10000001 10000010

あ UTF-16 Кодированная строка байтов: 00110000 01000010

Кто-то, пожалуйста, объясните мне значение термина старшие биты (или старший бит) в байте в контексте стандарта кодирования UTF-8 и PHP.

Кроме того, объясните мне, как эти старшие биты (или старший бит) в байте используются, чтобы сигнализировать, сколько байтов состоит из символа.

Как это явление старших бит (или старшего бита) в байте может сэкономить пространство, но может также потратить пространство, если эти сигнальные биты необходимо часто использовать?

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

1 Ответ

0 голосов
/ 18 сентября 2018

Этот ответ просто отвечает на ваши (небольшие) вопросы, но я действительно рекомендую вам прочитать Абсолютный минимум для каждого разработчика программного обеспечения Абсолютно, положительно необходимо знать о Unicode и наборах символов (без оправданий!) , чтобы получить более широкая картина. Ему 15 лет, но основы не меняются, и это дает хорошее объяснение истории, технических особенностей и истории этого. Это, безусловно, помогает объяснить некоторые проблемы, с которыми вы будете сталкиваться на практике при разработке веб-приложений с помощью Unicode, и поможет вам в настройке хороших тестовых случаев, чтобы ваше программное обеспечение не сломалось внезапно, когда французское или Японец начинает его использовать. В конце концов, если вы начнете использовать юникод, вам придется делать это правильно, от базы данных до заголовков кодировки.

Тем не менее ...

Старшие биты

Старшие биты - это биты, обычно записываемые с левой стороны, которые представляют наибольшую часть значения. Так же, как когда вы пишете 1857824, 1 - это самая высокая цифра (представляющая миллион). Для двоичного кода это то же самое, за исключением того, что эти числа всегда будут только 0 или 1.

Сигнальные биты

В юникоде вместо использования всех битов для значения символа (допускается 256 различных символов в байте), он использует меньшее количество битов и использует некоторые биты, чтобы сигнализировать, что следующий байт содержит больше информации о том же самом персонаж. Эти сигнальные биты находятся на верхней стороне (спереди).

Подгонка символов в 2 или 3 байта

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

Это означает, что UTF-16 требует меньше флагов (1 бит в 16 вместо 1 в 8), чтобы указать, будет ли больше групп. Таким образом, UTF-16 имеет больше места для данных персонажа. Это приводит к интересному эффекту для вашего «Japansese a», который также умещается в 2 байта в UTF-16, тогда как в UTF-8 вам нужно 3 байта, потому что используется слишком много сигнальных битов, и нет места для размещения Японский в 2 байта вместе со всеми другими наборами символов.

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

...