169
правок
AE (обсуждение | вклад) (Картинка + правки) |
AE (обсуждение | вклад) (Unicode, основная статья) |
||
Строка 17: | Строка 17: | ||
'''Но неудобно'''. Каждый начал кодировал буквы единицами и нулями по-своему. Причина в большом количестве разнообразных языков и алфавитов. Люди страдали и ругались пытаясь распознать какую из сотен кодировок надо использовать для того чтобы расшифровать эту '''文字化け''' присланную файлом в электронном письме. Всё было ужасно! 🤬 | '''Но неудобно'''. Каждый начал кодировал буквы единицами и нулями по-своему. Причина в большом количестве разнообразных языков и алфавитов. Люди страдали и ругались пытаясь распознать какую из сотен кодировок надо использовать для того чтобы расшифровать эту '''文字化け''' присланную файлом в электронном письме. Всё было ужасно! 🤬 | ||
И здесь появился ''' | И здесь появился '''Юникод'''. Единый стандарт кодирования букв из '''любых''' алфавитов в цифровое представление. Именно его мы используем прямо сейчас, общаясь в интернете с человеком из любой страны на любом языке да еще и с [[Emoji|эмодзи]]-картинками. И всё — прекрасно! 😇 | ||
'''И удобно (пока).''' | '''И удобно (пока).''' | ||
Строка 24: | Строка 24: | ||
== А если серьезно == | == А если серьезно == | ||
=== Международный стандарт === | |||
'''Юникод''' был создан в 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-й символ, должно отображаться на экране как эмодзи слона | |||
🐘 | |||
Фух, устали? Давайте поиграем | |||
Здесь будут вставлены игровые символы | |||
Недостатки | |||
Перечислить |