Обзор
В этой статье представлена кодировка Unicode и два соответствующих метода кодирования UTF-8 и UTF-16, чтобы читатели могли понять соответствующие знания о кодировании строк и понять взаимосвязь между Unicode, UTF-8 и UTF-16.
Основное содержание этой статьи:
- Кодировка Unicode, включая основы кодировки Unicode и связь с двумя методами кодирования UTF-8 и UTF-16.
- Кодировка UTF-8, включая основные понятия и преобразование из кодировки Unicode в кодировку UTF-8.
- Кодировка UTF-16, включая основные понятия и преобразование из кодировки Unicode в кодировку UTF-16.
- Строка и DOMString в JavaScript
Эта статья какutfx.jsБазовые знания по анализу исходного кода — это резервная статья.Поняв два метода кодирования UTF-8 и UTF-16, читатели смогут понять принцип преобразования кодировки с помощью JavaScript.
Если вы хотите понять сценарии использования преобразования кодировки, вы можете прочитать мой предыдущий блогКак преобразовать между строками JavaScript серии WebSocket и двоичными данными.
Если вы хотите знатьutfx.jsДля связанного содержимого исходного кода вы можете обратить внимание на мои последующие статьи.
Кодировка Юникод
концепция
Юникод (Юникод, Universal Code, Single Code) — отраслевой стандарт в области компьютерных наук, включая наборы символов, схемы кодирования и т. д. Юникод был создан для преодоления ограничений традиционных схем кодирования символов, которые устанавливают единый и уникальный символ для каждого символа в каждом языке.бинарныйКодирование для удовлетворения требований межъязыкового и кроссплатформенного преобразования и обработки текста. Исследования и разработки начались в 1990 году и были официально объявлены в 1994 году.
Обычно кодировка Unicode представляет символ через 2 байта, напримерU+A12B
, результатом двоичного представления 2 байта является1010(A)0001(1) 0010(2)1011(B)
.
После краткого знакомства с Unicode давайте взглянем на UTF-8 и UTF-16. нужно знать, это:UTF — это сокращение от Unicode TransferFormat, UTF-8 и UTF-16 — оба метода кодирования для преобразования кодов Unicode в программные данные.
UTF-8
концепция
UTF-8 (8-битный формат преобразования Unicode) — это кодировка символов переменной длины для Unicode, также известная как универсальный код. Создан в 1992 году Кеном Томпсоном. Теперь он стандартизирован как RFC 3629. UTF-8 кодирует символы Unicode от 1 до 6 байтов. Его можно использовать на веб-страницах для отображения китайского, упрощенного, традиционного и других языков (например, английского, японского, корейского) на единой странице.
Из приведенного выше введения мы можем узнать, что UTF-8 является очень общимпеременная длинакодировка символов.
Во-первых, давайте познакомимся с тем, что называетсяпеременная длинакодирование? Кодирование с переменной длиной означает, что при кодировании символа длина его представления не является фиксированной. Как и UTF-8, набор символов, представленный ASCII, представлен 1 байтом, а большинство китайских символов представлены 3 байтами.
По сравнению с Unicode, который использует 2 байта для представления символов, он может сэкономить много места для хранения, когда большинство символов может быть представлено 1 байтом. Однако, если вы столкнетесь с символами, которые должны быть представлены более чем 2 байтами, метод кодирования UTF-8 потребует больше места для хранения.
Представление
Из приведенного выше введения мы можем узнать, что разные коды Unicode занимают разное место для хранения в UTF-8. Давайте рассмотрим конкретные шаги по преобразованию символов Unicode в кодировку UTF-8 с помощью таблицы. один из них?
Указывает двоичную позицию, занимаемую кодом Unicode после преобразования в кодировку UTF-8.
Диапазон кодов Юникода | Метод кодировки UTF-8 |
---|---|
U+0000 ~U+007F
|
0???????? |
U+0080 ~U+07FF
|
110????? 10?????? |
U+0800 ~U+FFFF
|
1110???? 10?????? 10?????? |
U+10000 ~U+10FFFF
|
11110??? 10?????? 10?????? 10?????? |
Когда мы получаем код Unicode, мы сначала оцениваем его диапазон в соответствии с приведенной выше таблицей, затем преобразуем код Unicode в двоичное представление и перехватываем длину, оставшуюся в кодировке UTF-8, от конца к началу, в порядке от переднего к переднему. назад Заполните соответствующую позицию, чтобы получить кодировку UTF-8. Возьмем два примера:
-
U+0020
, этот символ меньше 0000 007F, поэтому для кодирования требуется только 1 байт.U+0020
Двоичное представление0000(0)0000(0) 0010(2)0000(0)
, затем перехватите 7 бит сзади вперед, чтобы получить010 0000
, поместите его в кодировку UTF-8, результат00101111
, преобразованный в шестнадцатеричный, чтобы получить2F
. Таким образом, порядок, хранящийся в памяти,2F
. -
U+A12B
, этот символ больше 0000 0800 и меньше 0000 FFFF, поэтому его необходимо кодировать 3 байтами.U+A12B
Двоичное представление1010(A)0001(1) 0010(2)1011(B)
. , затем усеките 16 бит сзади вперед, чтобы получить10100001 00101011
(сам код Unicode), поместите его в кодировку UTF-8, и результат11101010 10000100 10101011
, преобразовать в шестнадцатеричный, чтобы получитьEA84AB
. Таким образом, порядок, хранящийся в памяти,EA 84 AB
.
Благодаря приведенным выше примерам я считаю, что у всех есть глубокое понимание кодировки UTF-8. Далее рассмотрим еще один метод кодировки — UTF-16.
UTF-16
концепция
UTF-16 этоUnicodeТретий уровень пятиуровневой модели кодирования символов: реализация формы кодирования символов (также известной как «формат хранения»). То есть абстрактные кодовые точки набора символов Unicode отображаются в последовательность 16-битных целых чисел (т. е. кодовых единиц длиной 2 байта), которые используются для хранения или передачи данных. Кодовая точка символа Unicode требует для представления одной или двух 16-битных кодовых единиц, поэтому это представление переменной длины.
Цитируя объяснение кодировки UTF-16 в Википедии, мы можем знать, что UTF-16 также использует как минимум 2 байта для представления символа, поэтому нет никакого способа быть совместимым с кодировкой ASCII (кодировка ASCII использует 1 байт для хранения).
Представление
В UTF-16 мы делим Unicode на два диапазона, которые хранятся по-разному. Конкретное представление показано на рисунке ниже.
Диапазон Юникода | Метод кодирования UTF-16 |
---|---|
U+000 ~U+FFFF
|
2-байтовое хранилище, равное значению Unicode после кодирования |
U+10000 ~U+10FFFF
|
Хранилище 4 байта, теперь вычтите значение Unicode (0x10000), чтобы получить 20-битное значение. Затем разделите Unicode на старшие 10 бит и младшие 10 бит. Старший бит кодировки UTF-16 равен 2 байтам, а старший 10-битный диапазон Unicode равен0 -0x3FF , добавив значение Unicode в0XD800 , получить суррогат старшего порядка (или называемый начальным суррогатом, сохраняющим старший порядок); младший суррогат также равен 2 байтам, а диапазон Unicode для младших десяти такой же, как0 ~0x3FF , добавив значение Unicode в0xDC00 , получить младший прокси-сервер (или называется задним прокси-сервером, в котором хранятся младшие биты) |
Согласно приведенному выше методу преобразования мы можем преобразовать код Unicode в соответствии с методом кодирования UTF-16. Ниже мы по-прежнему рассмотрим два примера:
-
U+0020
, диапазон этого значения находится в первой части, то есть после кодировки UTF-16 результат все равноU+0020
, порядок в памяти такой00 20
. -
U+12345
, диапазон этого значения находится во второй части, поэтому его нужно сначала вычесть0x10000
,получать0x02345
, разделенный на старшие 10 бит00 0000 1000
и младшие 10 бит11 0100 0101
. После добавления определенного значения в соответствии с приведенными выше правилами, высокое значение проксиD808
, нижнее суррогатное значение равноDF45
, последний порядок в памятиD8 08 DF 45
.
Строка и DOMString в JavaScript
В JavaScript все типы строк (илиDOMString) кодируются в UTF-16.
Поэтому, когда нам нужно преобразовать в двоичный файл для связи с серверной частью, нам нужно обратить внимание на соответствующие методы кодирования.
Суммировать
В этой статье представлены кодировка Unicode и методы кодирования UTF-8 и UTF-16, чтобы вы могли понять кодировку Unicode и два связанных метода кодирования данных программы.
Эта статья какutfx.jsБазовые знания об анализе исходного кода — это резервная статья. Позже я представлю вам следующую статью с соответствующим содержанием — анализ исходного кода utfx.js, чтобы вы могли понять, как выполнять связанные преобразования кодировки в JavaScript.