🔍 КАК ЭТО УСТРОЕНО

Как эмодзи устроены внутри: история Unicode

Ты отправляешь жёлтую рожицу, а на самом деле пересылаешь число. Разбираемся, как из хаоса разных кодировок родился Unicode и почему эмодзи на разных телефонах иногда выглядят по-разному.

Ты нажимаешь на жёлтую рожицу, отправляешь её другу — и она долетает целой. А ведь по проводам и через спутники не путешествуют картинки рожиц. Путешествуют числа. Как же твой телефон и телефон друга договорились, что число 128512 означает именно улыбку, а не, скажем, букву «Ж»?

Компьютер не знает букв. Он знает числа

Главный секрет в том, что внутри компьютера нет ни букв, ни смайликов. Есть только числа. Любой символ, который ты видишь на экране, — это на самом деле число, которое договорились рисовать определённым образом.

Представь огромную таблицу. В одной колонке — номер, в другой — символ. Номер 65 — это «A». Номер 97 — это «a». Когда ты печатаешь «A», компьютер запоминает число 65, а когда показывает текст обратно — смотрит в таблицу и рисует нужную закорючку. Такая таблица называется кодировкой.

Это как гардероб в театре. Ты сдаёшь куртку — тебе дают номерок. Сам номерок — не куртка, это просто число. Но по нему всегда найдут именно твою вещь. Кодировка — это и есть гардеробщик, который связывает номер с символом.

Вавилон кодировок: когда все говорили по-разному

Долгое время каждая страна и компания делала свой гардероб. Самой известной была таблица ASCII — в ней помещалось всего 128 символов: латинские буквы, цифры и знаки препинания. Для английского хватало, а вот русские, греческие, китайские буквы туда не влезали.

Тогда придумали десятки разных кодировок для разных языков. И начался хаос. Один и тот же номер в русской таблице означал «Ы», а в греческой — совсем другую букву. Ты наверняка видел его следы: открываешь старый файл, а вместо текста — «Ð¿Ñ€Ð¸Ð²ÐµÑ‚» или загадочные «крякозябры». Это значит, что текст записали по одному гардеробному списку, а прочитали по другому — и гардеробщик выдал чужие куртки.

Проблема была не в том, что номеров мало. Проблема была в том, что у всех номера значили разное. Миру нужен был один гардероб на всех.

Unicode: один список для всего человечества

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

Записывают кодовую точку обычно так: U+0041 — это «A», а U+044B — русская «ы». Букв U+ и шестнадцатеричных цифр пугаться не стоит: это просто способ записать число, которое люди договорились понимать одинаково по всему свету.

В Unicode сегодня закодированы латиница и кириллица, китайские иероглифы, арабская вязь, древние руны, математические знаки, ноты — и даже символы давно мёртвых языков, которые расшифровывают учёные. Это самый большой гардероб в истории, и места в нём хватает на сотни тысяч символов.

А где же эмодзи?

А эмодзи — это просто ещё одни жильцы этого огромного дома. Когда в Unicode добавили смайлики, каждому из них тоже выдали свою кодовую точку. Жёлтая улыбка во весь рот — это U+1F600. Кошка, ракета, пицца — у каждого свой номер в общей таблице.

Вот почему эмодзи вообще работают между разными телефонами: и iPhone, и Android-смартфон знают, что число U+1F600 — это «улыбка». Но рисует картинку каждый по-своему! У Apple свой набор картинок, у Google свой, у мессенджеров — третий. Номер один, а художники разные. Поэтому твоя «ухмылка» у друга может выглядеть чуть иначе — это не баг, это просто другой иллюстратор для того же номера.

Есть и совсем хитрые случаи. Многие эмодзи на самом деле собираются из нескольких кодовых точек подряд. Например, эмодзи семьи или человечков разных оттенков кожи — это базовый символ плюс специальный «модификатор цвета». А флаги стран вообще хитрющие: флаг — это две буквы кода страны, написанные особыми невидимыми символами. Телефон видит подряд «RU» в специальном алфавите и понимает: рисуй российский флаг.

Числа, превращённые в байты: UTF-8

Остался последний кусочек. Кодовая точка — это идея, абстрактный номер. Но в файл и в сеть нужно записать конкретные байты — маленькие порции данных. За перевод номеров в байты отвечает специальный способ упаковки, и самый популярный сегодня — UTF-8.

Его гениальность в экономности. Обычные английские буквы UTF-8 пакует в один байт — ровно как старый добрый ASCII. А вот символы посложнее занимают больше места:

  • латинская буква — 1 байт;
  • кириллическая буква — 2 байта;
  • иероглиф — обычно 3 байта;
  • эмодзи — целых 4 байта.

Поэтому один смайлик «весит» больше, чем целое английское слово из трёх букв. Когда ты в следующий раз отправишь другу рожицу, помни: ты послал ему не картинку, а аккуратно упакованное число, которое его телефон узнает по общему для всего мира списку и нарисует своей кистью. Весь интернет держится на этой простой договорённости — и именно поэтому мы наконец-то понимаем друг друга, на каком бы языке ни писали.

#unicode#utf-8#как это устроено#кодировки#эмодзи
Понравилась статья?
В Telegram-канале — лучшее из журнала и анонсы новых учебников.