Интервьюер задает вам вопросы, связанные с кодированием, оставьте это ему, и все готово!

Java

Прошлый обзор:В Java символ занимает два байта, но почему new String("word").getBytes().length возвращает 3 байта

Сегодня мы в основном говорим о:

  • байт
  • персонаж
  • набор символов
  • кодирование
  • Кодировка символов
  • Внутренний и внешний код Java
  • Unicode

байт

Например: 00001111 Это 8-битное двоичное число занимает один байт памяти.

Байт (англ. Byte), обычно используемый как единица измерения компьютерной информации, независимо от типа данных. Байт представляет собой восемь битов (англ. Bit). Это самое основное понятие. Байт — это единица измерения для расчета объема памяти. Компьютеры могут распознавать только двоичные биты, состоящие из 1 и 0. Число — это 1 бит, для удобства вычислений оговорим, что 8 бит — это байт.

Например: 00001111 Это 8-битное двоичное число занимает один байт памяти.

персонаж

Символы — это не то же самое, что байты. Любой текст или символ является символом, но байты, которые он занимает, не обязательно совпадают. Различные кодировки приводят к тому, что символ занимает разную память. Символы — это общий термин для различных знаков и символов, включая национальные символы, знаки препинания, графические символы, цифры и т. д. То есть число — это символ, литерал — это символ, и знак препинания — это тоже символ.

1 — символ, «Хан» — символ, восклицательный знак «!» — символ.

набор символов

charset — это сокращение от набора символов, то есть набора символов. Набор символов называется набором символов. Набор символов ASCII указан в таблице ниже.Набор всех символов в столбце символов.

кодирование

Кодирование — это очень широкое понятие! Хотя мы использоваликодированиеКонкретноКодировка набора символов, но это только узкое понимание, есть много широких понятий:

  • Текст — это кодировка звука.
  • Камеры, видеокамеры кодируют световые сигналы в изображения и видео
  • Еще мы часто видим штрих-коды, QR-коды, это коды

Знаменитая азбука Морзе на самом деле является кодировкой:

image

На картинке код М — «━ ━», остальные аналогичны.

Кодирование символов — это случай кодирования, но когда мы узнаем о компьютерах, кодирование — это кодирование символов.

Кодировка символов

кодировка — это аббревиатура кодировки кодировки, то есть кодировки набора символов или кодировки для краткости. Определяет, как символы в наборе символов кодируются как определенные двоичные числа для хранения в компьютере (то есть соответствующие позиции символов в наборе символов преобразуются в двоичные).

Наборы символов и кодировки символов обычно соответствуют друг другу, за исключением набора символов Unicode, поскольку набор символов Unicode имеет три метода кодирования (utf-8, utf-16, utf-32).

Разница между кодировкой символов и набором символов

Сравнение с интерфейсом и реализация интерфейса

можно совместить эти два синтерфейса такжереализация интерфейсаСделайте сравнение:

image.png

Отсюда ясно, что

  1. Кодирование зависит от набора символов, так же как реализации интерфейса в коде зависят от интерфейсов;
  2. Набор символов может иметь несколько реализаций кодировки, так же как интерфейс может иметь несколько классов реализации.

Внутренний код и внешний код в Java

Проще говоря

  • Внутренний код: метод кодирования, используемый char или String в памяти.
  • Внешний код: все, кроме внутреннего кода, можно рассматривать как «внешний код». (включая кодировку файла класса)

внутренний код java: юникод (utf-16)

Внешний код JVM по умолчанию:

  • окна --gbk
  • линукс - utf-8

Почему Юникод такой особенный?

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

Целью Unicode является унификация всех наборов символов, включая все символы.Грубая оценка 17 × 60 000 = 1,02 миллиона, поэтому разработка набора символов подходит к концу, и нет необходимости корректировать какой-либо новый набор символов. Так и должно быть, 1,02 миллиона сейчас вполне достаточно.

Но что, если вы чувствуете, что его существующая схема кодирования не очень хороша? В случае невозможности придумать новый набор символов, мы можем только возиться с кодировкой, поэтому существует несколько реализаций, так что традиционное взаимно-однозначное соответствие нарушается.

Например, кодировка UTF-32, даже если это 00000000 00000000 00000000 00001111 которая на самом деле занимает только 1 байт символов, мы должны выделить для него 4 байта места, что приводит к файлу, который можно сохранить в 1G, 4G теперь требуется сохранить, что является чрезвычайно расточительной практикой.

Итак, Дэниел считает, что кодировка UTF-32 слишком расточительна, поэтому Дэниел сделал схему кодировки UTF-8, UTF-16 (вот пример, возможно, Дэниел просто выбрал ее для игры, конкретная причина неизвестна).

[В Юникоде] (https://mp.weixin.qq.com/s/FZVaMuvikFWlzhs29EWD1g)

Ссылаться на

  • https://baike.baidu.com/item/ASCII/309296?fr=aladdin
  • https://www.cnblogs.com/Xieyang-blog/p/9401999.html
  • https://blog.csdn.net/qq_42068856/article/details/83792174
  • https://wikipedia.hk.wjbk.site/
  • https://xiaogd.net/
  • https://blog.csdn.net/zhongguomao/article/details/54405637

Эта статья была впервые опубликована в публичном аккаунте WeChat: Programmer Qiaogori

Если вы являетесь пользователем Toutiao, вы можете размещать сообщения в моей учетной записи Toutiao.Программист ЧогориСправочный ответ Ресурс для получения материалов по программированию и вступительным экзаменам в аспирантуру на сумму 59 998 юаней.
Если вы считаете, что статья хорошая, обратите внимание на мой публичный аккаунт WX:Программист Чогори
Я работаю инженером-разработчиком на большом заводе BAT. Я сосредоточен на обмене техническими галантерейными товарами / ресурсами по программированию / собеседованиям при приеме на работу / идеями роста и т. д. Я уделяю внимание отправке ресурсов по программированию 5000G и Facebook, который я организовал, чтобы помочь многие люди выигрывают предложения Java.Ответы, ресурсы CSDN для бесплатной загрузки.