Кодировка - это отображение между байтами и символами из набора символов, поэтому будет полезно обсудить и понять разницу между байтами и символами .
Думайте о байтах как числах от 0 до 255, тогда как символы - это абстрактные вещи, такие как «a», «1», «$» и «Ä». Набор всех доступных символов называется набором символов .
Каждый символ имеет последовательность из одного или нескольких байтов, которые используются для его представления; однако точное число и значение байтов зависит от используемой кодировки, и существует множество различных кодировок.
Большинство кодировок основано на старом наборе символов и кодировке, называемой ASCII, которая представляет собой один байт на символ (фактически только 7 бит) и содержит 128 символов, включая множество общих символов, используемых в американском английском языке.
Например, здесь есть 6 символов в наборе символов ASCII, которые представлены значениями от 60 до 65.
Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║ Character ║
╠══════╬══════════════║
║ 60 ║ < ║
║ 61 ║ = ║
║ 62 ║ > ║
║ 63 ║ ? ║
║ 64 ║ @ ║
║ 65 ║ A ║
╚══════╩══════════════╝
В полном наборе ASCII самое низкое используемое значение равно нулю, а самое высокое - 127 (оба они являются скрытыми управляющими символами).
Однако, как только вы начинаете нуждаться в большем количестве символов, чем обеспечивает базовый ASCII (например, буквы с акцентами, символы валюты, графические символы и т. Д.), ASCII не подходит, и вам нужно что-то более обширное. Вам нужно больше символов (другой набор символов), и вам нужна другая кодировка, так как 128 символов недостаточно для размещения всех символов. Некоторые кодировки предлагают один байт (256 символов) или до шести байтов.
Со временем было создано много кодировок. В мире Windows есть CP1252 или ISO-8859-1, тогда как пользователи Linux предпочитают UTF-8. Java использует UTF-16 изначально.
Одна последовательность значений байтов для символа в одной кодировке может обозначать совершенно другой символ в другой кодировке или даже может быть недействительной.
Например, в ISO 8859-1 , â представлен одним байта значения 226
, тогда как в UTF-8 это два байт: 195, 162
. Однако, в ISO 8859-1 , 195, 162
будет два символа, а, ¢ .
Когда компьютеры хранят данные о символах внутри или передают их в другую систему, они сохраняют или отправляют байты. Представьте, что система, открывающая файл или получающая сообщение, видит байты 195, 162
. Откуда он знает, что это за персонажи?
Чтобы система могла интерпретировать эти байты как фактические символы (и, таким образом, отображать их или преобразовывать их в другую кодировку), ей необходимо знать используемую кодировку. Вот почему кодировка отображается в заголовках XML или может быть указана в текстовом редакторе. Он сообщает системе отображение между байтами и символами.