Unicode: различия между версиями

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


И здесь появился '''Unicode'''. Единый стандарт кодирования букв из '''любых''' алфавитов в цифровое представление. Именно его мы используем прямо сейчас, общаясь в интернете с человеком из любой страны на любом языке да еще и с [[Emoji|эмодзи]]-картинками. И всё — прекрасно! 😇
И здесь появился '''Юникод'''. Единый стандарт кодирования букв из '''любых''' алфавитов в цифровое представление. Именно его мы используем прямо сейчас, общаясь в интернете с человеком из любой страны на любом языке да еще и с [[Emoji|эмодзи]]-картинками. И всё — прекрасно! 😇


'''И удобно (пока).'''
'''И удобно (пока).'''
Строка 24: Строка 24:


== А если серьезно ==
== А если серьезно ==
TBD
 
=== Международный стандарт ===
'''Юникод''' был создан в 1991 году и в данный момент является стандартом соответствия каждого символа некоторому порядковому номеру — кодовой точке. Стандарт ограничивает количество допустимых символов примерно миллионом (1112064). Но на практике в 2022 году было занято лишь 149186 символа. Кол-во символов увеличивается с каждым годом.
 
Примеры символов Юникода:
 
* $ — доллар, 36-й символ (U+0024)
* ꙮ — самая редкая буква кириллицы, используется только в одном слове мн҆огоꙮ҆читїи҆ (многоокий), 42606-й символ (U+A66E)
* 🐘 — [[Emoji|эмодзи]] слона 128024-й символ (U+1F418)
 
Этот стандарт называется '''UCS''' (Universal Character Set)
 
=== Главные достоинства ===
 
* '''Универсальность''': Юникод поддерживает символы почти всех языков мира. Это позволяет общаться, распознавать и понимать тексты на любом языке, от английского до японского.
* '''Совместимость''': Юникод отлично поддерживается на большинстве современных устройств обеспечивает частичную совместимость с другими кодировками и платформами, что позволяет вашим текстам быть доступными и понятными для всех, вне зависимости от используемого ими программного обеспечения или устройства.
* '''Современное общение''': Юникод активно поддерживает современные тренды, такие как эмодзи, которые стали ключевым элементом общения в интернете. Теперь вы можете полностью выразить свои мысли и эмоции в текстах и сообщениях.
* '''Развитие''': Юникод постоянно развивается и обновляется, чтобы быть актуальным и отвечать на потребности современного общества. Используя Юникод, вы будете на переднем крае прогресса в области языков и кодирования.
* '''Уважение к культурам''': Если вы интересуетесь историей и культурой, Юникод даст вам возможность исследовать древние и редкие письменности, которые стали доступными благодаря его универсальности.
* '''Эффективность''': Юникод предлагает разные форматы кодирования, такие как UTF-8, UTF-16 и UTF-32, которые позволяют экономить место или обеспечивать лучшую производительность при работе с текстами.
* '''Международное сообщество''': Изучая Юникод, вы становитесь частью глобального сообщества специалистов, исследователей и энтузиастов, которые заботятся о сохранении и развитии многообразия языков и культур мира
 
=== '''Зачем понадобились дополнительные кодировки UTF вместо UCS?''' ===
Уже на примере слона 🐘 с номером 128024 видно что он очень большой и не влезает в 2 байта, нужно минимум три:
 
128024 = <code>1 F4 18</code> = <code>[00000001] [11110100] [00011000]</code> (номер слона в бинарном виде).
 
Казалось бы, всё просто — используй всегда 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 стал самой популярной кодировкой в интернете и веб-приложениях.
 
Но если каждая буква имеет разную длину в байтах как компьютер в потоке единиц и нулей понимает где заканчивается предыдущая буква и начинается следующая?
 
Когда компьютер читает последовательность байтов, он смотрит на первые биты и определяет длину символа:
 
* <code>0</code> = длина будет 1 байт
* <code>110</code> = длина будет 2 байта
* <code>1110</code> = длина будет 3 байта
* <code>11110</code> = длина будет 4 байта
 
Дальше он читает остальные байты и выкидывает из каждого байта лишние биты <code>10</code> (они нужны для сверки), оставшиеся биты объединяет.
 
Итого:
 
<code>[11110 '''000'''] [10 '''011111'''] [10 '''010000'''] [10 '''011000''']</code>
 
преобразуется в
 
<code>000 011111 010000 011000</code>
 
или
 
<code>[00000001] [11110100] [00011000]</code> = <code>1 F4 18</code>  = 128024
 
что является Unicode символом U+1F418
 
А по стандарту '''UCS''' этот 128024-й символ, должно отображаться на экране как эмодзи слона
 
🐘
 
Фух, устали? Давайте поиграем
 
Здесь будут вставлены игровые символы
 
Недостатки
 
Перечислить

Версия от 16:37, 8 апреля 2023

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 вместо UCS?

Уже на примере слона 🐘 с номером 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

что является Unicode символом U+1F418

А по стандарту UCS этот 128024-й символ, должно отображаться на экране как эмодзи слона

🐘

Фух, устали? Давайте поиграем

Здесь будут вставлены игровые символы

Недостатки

Перечислить