Как изменить кодировку js файла

Обновлено: 07.07.2024

программа javascript использует Unicode Написано в наборе символов. Unicode да ASCII с Latin-1 Расширенный набор и поддерживает почти все языки на планете. ECMAScript3 JavaScript должен поддерживаться Unicode2.1 И последующие версии, ECMAScript5 Запросить поддержку Unicode3 И последующие версии. Следовательно, все написанные нами программы javascript закодированы в Unicode.

Его можно использовать для представления любого символа в стандарте Unicode и его кодировки. Первый байт все еще совместим с ASCII , Это делает ненужным исходное программное обеспечение, обрабатывающее символы ASCII, или вносит лишь небольшие изменения, вы можете продолжать его использовать. следовательно, Постепенно он стал предпочтительной кодировкой для электронных писем, веб-страниц и других приложений, которые хранят или отправляют текст. 。

Большинство веб-сайтов в настоящее время используют кодировку UTF-8.

Преобразование строки в кодировке Unicode, сгенерированной javascript, в строку в кодировке UTF-8

Сценарии приложений, упомянутые в заголовке, очень распространены. Например, при отправке части двоичного файла на сервер сервер оговаривает, что кодирование двоичного содержимого должно быть UTF-8. В этом случае мы должны запрограммировать строку Unicode JavaScript в строку в кодировке UTF-8.

Метод преобразования

Перед преобразованием мы должны понять, что структура кодирования Unicode фиксирована.
Если вы не верите, вы можете попробовать метод charCodeAt для String, чтобы узнать, сколько байтов занимает возвращенный charCode.

  • Английский занимает 1 символ, китайские символы - 2 символа

Однако длина структуры кодирования UTF-8 составляет По размеру одного символа Определить длину.
Размер одного символа занимает несколько байтов ниже. Максимальная длина одного символа Юникода после кодирования составляет 6 байтов.


Пожалуйста, смотрите изображение для деталей:

Поскольку код Unicode для английских и английских символов 0 - 127 , Таким образом, длина и байты английского языка в Unicode и UTF-8 одинаковы, занимая всего 1 байт. Вот почему UTF8 - это надмножество Unicode !

Теперь давайте снова обсудим китайские иероглифы, потому что диапазон кода Юникода китайских символов 0x2e80 - 0x9fff , Таким образом, длина китайских символов в UTF8 составляет до 3 байтов.

Так как же китайские иероглифы преобразовать 2 байта Unicode в 3 байта UTF8?

Предположим, мне нужно преобразовать китайский символ " " в кодировку UTF-8.

1. Получите значение Unicode для китайских иероглифов.

2. Оцените длину UTF8 по размеру.

3. Дополнение

Теперь, когда мы знаем, что китайскому иероглифу « » нужно 3 байта, как нам получить эти 3 байта?


Это должно быть разработано для дополнения, конкретная логика дополнения выглядит следующим образом:

Хорошо, я знаю, что вы не понимаете эту картинку, поэтому позвольте мне рассказать об этом!

Конкретный дополнительный код выглядит следующим образом: «x» представляет вакансию и используется для дополнения.

  • 0xxxxxxx

  • 110xxxxx 10xxxxxx

  • 1110xxxx 10xxxxxx 10xxxxxx

  • 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

  • 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

  • 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

предупреждение: вы его нашли? Число единиц перед первым байтом дополнительного кода указывает, сколько байтов занимает вся кодировка UTF-8! Декодирование UTF-8 в Unicode заключается в использовании этой функции

Начнем с простого примера. Преобразуйте английскую букву «A» в кодировку UTF8.
1. charCode буквы "A" - 65.
2. 65 находится в диапазоне 0-127, поэтому "A" занимает один байт.
3. Дополнение байта в UTF8 - 0xxxxxxx, где x представляет собой пробел и используется для дополнения.
4. Преобразуйте 65 в двоичное, чтобы получить 1000001.
5. Добавьте 1000001 к 1xxxxxxx в порядке от начала до конца, чтобы получить 01000001.
6. Преобразуйте 11000001 в строку и получите "А".
7. Наконец, "A" - это "A" после кодировки UTF8.

С помощью этого небольшого примера мы снова проверили UTF-8 - это надмножество Unicode !

Хорошо, давайте теперь вернемся к китайскому иероглифу « », у нас есть charCode « » как 20013, а двоичный код 01001110 00101101 . подробности следующим образом:

Затем мы следуем методу заполнения «А», описанному выше, чтобы заполнить «среднюю» позицию.
будем 01001110 00101101 По порядку спереди назад 1110xxxx 10xxxxxx 10xxxxxx На. Получить 11100100 10111000 10101101 .

4. Получите контент в кодировке UTF8.

Выполнив описанные выше шаги, мы получили три байта UTF8 "medium", 11100100 10111000 10101101 。
Преобразуем каждый байт в шестнадцатеричный и получаем 0xE4 0xB8 0xAD ;
Тогда это 0xE4 0xB8 0xAD Вот и получилась кодировка UTF8.

Мы используем буфер nodejs, чтобы убедиться, что он правильный.

Поскольку в шестнадцатеричной системе регистр не учитывается, рассчитываете ли вы ее вместе с нами? 0xE4 0xB8 0xAD Точно так же.

Запишите приведенную выше логику кодирования в функцию.

Другой способ разобрать китайский, чтобы получить байт-код UTF8

Другой более простой метод преобразования китайского в байт-код UTF8 относительно прост. Браузер также предоставляет метод, и все использовали этот метод. Что это? Просто encodeURI . конечно, encodeURIComponent это тоже нормально.
Правильно, это метод. Итак, как этот метод преобразует китайский в кодировке Unicode в байт-код UTF8?

Вы нашли экранированную строку? И содержание этой строки такое же, как и байт-код, который я получил выше.

Ниже мы будем %E4%B8%AD Преобразуется в числовой массив.

Это так просто, никак

В чем принцип этого простого метода?

Здесь это задействовано URI средний querystring Проблема кодирования. Поскольку согласно правилам, строка запроса в URI должна передаваться в соответствии с кодировкой UTF8, а JavaScript - это Unicode, поэтому браузер предоставляет нам метод, который encodeURI / encodeURIComponent метод. Этот метод будет говорить Неанглийские символы (Подумайте, почему неанглийские символы?) Сначала преобразовали в байт-код UTF8, а затем добавили% впереди для сращивания, поэтому мы будем использовать китайские символы "в" Получите это при побеге "%E4%B8%AD" .
Ну вот принцип, больше ничего нет.

Однако у этого метода есть недостаток: Только экранируйте неанглийские символы , Поэтому, когда нам нужно отформатировать английские символы в кодировке UTF8, этот метод не соответствует нашим потребностям, нам также нужно дополнительно экранировать английские символы.

Что мне делать, если я хочу разобрать его? использовать decodeURI / decodeURIComponent Вот и все.

Что ж, эта статья познакомит вас с кодировкой UTF8.
Надеюсь помочь вам понять принцип кодировки UTF-8.

Читайте также: