Unicode

Версия от 13:28, 9 апреля 2023; AE (обсуждение | вклад) (Правки и улучшения)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Unicode (Юникод) — общепринятый международный стандарт, который позволяет преобразовать буквы разных языков и символы в цифровой вид. Для этого каждому символу присваивается уникальный номер. Благодаря Юникоду, пользователи могут свободно обмениваться информацией в интернете на любом предпочитаемом языке.

Объясните простыми словами, пожалуйстаПравить

 
Безуспешные попытки пообщаться без Unicode

Давайте разберемся, что такое кодирование.

Начнем с времен, когда одному древнему человеку нужно было объяснить другому, за кем сегодня они пойдут охотиться. Древний человек издавал звуки животных, размахивал руками и костями вчерашнего ужина, указывал пальцем на рисунки животных на стене в пещере и всё было прекрасно! 💁🦣

Но неудобно. Когда нужно было "пообщаться" приходилось бегать к стене с картинками или устраивать представление. Тогда было решено закодировать образы и действия определенными звуками. Звуки объединялись в последовательности и так появились слова. Люди начали говорить и общались звуками тысячи лет, всё было прекрасно! 🧔💬

Но неудобно. Звук не получалось поймать и положить на хранение. И люди опять вернулись к рисованию. Но рисовали уже не животных на стенах, а звуки и слова. Эти кодирующие рисунки становились проще и со временем превратились в буквы. Их рисовали на тонких листочках, собирали в книги, хранили и передавали знания. Всё было прекрасно! 🧑‍🎓📚

Но неудобно. Когда нужно передать буквы из одного города в другой — их надо туда нести. А в провода буквы не влезают. Тогда пришлось кодировать уже буквы слов в виде последовательности коротких и длинных сигналов — так появилась азбука Морзе и всё было прекрасно! 🚢🆘

Но неудобно. Азбука Морзе передавала информацию медленно, сложно, неинтересно. С развитием компьютеров, она была заменена цифровым двоичным кодом. Где каждой букве была сопоставлена последовательность единиц и нулей. И всё было прекрасн0111

Но неудобно. Каждый начал кодировать буквы единицами и нулями по-своему. Причина в большом количестве разнообразных языков и алфавитов. Люди страдали и ругались, пытаясь угадать, какую из сотен кодировок надо применить, для того чтобы расшифровать эту 文字化け из файла в электронном письме. Всё было ужасно! 🤬

И здесь появился Юникод — международный алфавит, объединивший и упорядочивший буквы почти всех языков мира! Именно его мы используем прямо сейчас, общаясь в интернете с человеком из любой страны на любом языке да еще и с эмодзи-картинками. И всё — прекрасно! 😇

И удобно?

PS ходят легенды, что школьники на уроках до сих пор рисуют палочками с краской на деревянных листочках странные головы быков: ⱯАААА! ✍️

А если серьезноПравить

Международный стандартПравить

Юникод был создан в 1991 году и в данный момент является стандартом соответствия каждого символа некоторому порядковому номеру — кодовой точке. Стандарт ограничивает количество допустимых символов примерно миллионом (1112064). Но на практике в 2022 году было занято лишь 149186 символа. Количество символов увеличивается с каждым годом.

Примеры символов Юникода:

  • $ — доллар, 36-й символ (U+0024)
  • ꙮ — самая редкая буква кириллицы, используется только в одном слове мн҆огоꙮ҆читїи҆ (многоокий), 42606-й символ (U+A66E)
  • 🐘 — эмодзи слона 128024-й символ (U+1F418)

Этот стандарт называется UCS (Universal Character Set — Универсальный набор символов)

Главные достоинстваПравить

  • Универсальность: Юникод поддерживает символы почти всех языков мира. Это позволяет общаться, распознавать и понимать тексты на любом языке, от английского и японского, до языков древних цивилизаций.
  • Совместимость: Юникод отлично поддерживается на большинстве современных устройств и обеспечивает частичную совместимость с другими кодировками и платформами. Это позволяет вашим текстам быть доступными и понятными для всех, вне зависимости от используемого ими программного обеспечения или устройства.
  • Современное общение: Юникод активно поддерживает современные тренды, такие как эмодзи, которые стали ключевым элементом общения в интернете. Благодаря им, вы можете полностью выразить свои мысли и эмоции в текстах и сообщениях.
  • Развитие: Юникод постоянно развивается и обновляется, чтобы быть актуальным и отвечать на потребности современного общества. Используя Юникод, вы будете на переднем крае прогресса в области языков и кодирования.
  • Уважение к культурам: Юникод дает возможность исследовать древние и редкие письменности, которые стали более доступными благодаря его универсальности. Изучая Юникод, вы становитесь частью глобального сообщества специалистов, исследователей и энтузиастов, которые заботятся о сохранении многообразия языков и культур мира.
  • Эффективность: Юникод предлагает на выбор разные форматы кодирования, такие как UTF-8, UTF-16 и UTF-32, которые позволяют экономить место или обеспечивать лучшую производительность при работе с текстами.

Зачем нужны кодировки UTF для Unicode?Править

Уже на примере слона 🐘 с номером 128024 видно, что он очень большой и не влезает в 2 байта, нужно минимум три:

128024 = 1 F4 18 = [00000001] [11110100] [00011000] (номер слона в бинарном виде).

Казалось бы, всё просто — используй всегда 3 байта для каждой буквы. Но это очень расточительно расходует память компьютера для хранения данных. Поэтому были придуманы варианты более эффективных кодировок UTF (UCS Transformation Format), которые упаковывают исходные номера букв в последовательности переменной длины от 1 до 4 байта:

  • UTF-8 - кодировка переменной длины от 1 до 4 байт
  • UTF-16 - кодировка переменной длины 2 или 4 байта
  • UTF-32 - кодировка фиксированной длины 4 байта

Как работает UTF-8?Править

Самой эффективной на практике оказалась кодировка UTF-8, в ней часто используемые латинские буквы и цифры занимают всего 1 байт. Это не только вопрос экономии места, но и обратной совместимости — цифровой текст в ранее популярной однобайтовой кодировке ASCII будет правильно прочитан в UTF-8. Как результат, UTF-8 стал лучшей кодировкой для текстов в интернете и веб-приложениях.

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

Когда компьютер читает последовательность байтов, он смотрит сначала на первые биты байта и определяет итоговую длину символа:

  • 0 = длина будет 1 байт
  • 110 = длина будет 2 байта
  • 1110 = длина будет 3 байта
  • 11110 = длина будет 4 байта

Зная длину символа, он читает следующие байты в нужном количестве и выкидывает из них первые биты 10 (они нужны для сверки), а все оставшиеся биты объединяет.

Итого:

[11110 000] [10 011111] [10 010000] [10 011000]

преобразуется в

000 011111 010000 011000

или

[00000001] [11110100] [00011000] = 1 F4 18 = 128024

что является 128024-й символом Юникода U+1F418 и должно отображаться на экране как эмодзи слона

🐘

Поиграем?Править

Юникод содержит текстовые символы всех элементов популярных настольных игр. Примеры некоторых из них: 🁣🁩🁬 ♚♛♘ 🂠🂭🂸 ⚀⚂⚅ 🀁🀆🀇. Текст увеличенного размера:

🁣 🁩 🁬 🂠 🂭 🂸 🀁 🀆 🀇

НедостаткиПравить

  • Сложность понимания: Из-за огромного количества символов и разных форматов кодирования Unicode может быть сложным для понимания и использования, особенно для новичков в IT.
  • Многосимвольные символы: Вместо включения дополнительных символов в стандарт, иногда применяются «костыли» с комбинациями. 👨 + U+200D + 👩 + U+200D + 👧 + U+200D + 👦 = 👨‍👩‍👧‍👦
  • Различное отображение: Юникод — не шрифт и не содержит информации, как отображать символы. Нет никаких гарантий, что ваш символ будет отображен у другого пользователя в том же виде.
  • Проблемы с совместимостью: Очень старые программы и устройства могут не поддерживать Unicode или часть его нововведений. Это может привести к неправильному отображению текста, замене символов на знаки вопроса � или прямоугольники ▯.
  • Размер данных: Использование Unicode может привести к увеличению размера файлов, в сравнении с кодировками, заточенными под определенный язык. Это может увеличить затраты на хранение данных при больших объемах.
  • Низкая производительность: Из-за сложности разбора UTF кодировок, производительность программ по обработке текстов может быть ниже в сравнении с более простыми, но менее универсальными кодировками.
  • Постоянные обновления: Стандарт постоянно обновляется. Это может вызвать сложности в отслеживании изменений и поддержании актуальности ваших приложений или устройств.

Дополнительные статьиПравить

  • Emoji — здесь перечислены все символы эмодзи с разбивкой на группы по оригинальному стандарту Юникод