Подробное объяснение кодировки UTF-8 и UTF-16 в Unicode.

задняя часть внешний интерфейс JavaScript Unicode

Обзор

В этой статье представлена ​​кодировка 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.