Кодировка - это отображение между байтами и символами из набора символов, поэтому будет полезно обсудить и понять разницу между байтами и символами .
Думайте о байтах как числах от 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 или может быть указана в текстовом редакторе. Он сообщает системе отображение между байтами и символами.