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

268 байт добавлено ,  13:28, 9 апреля 2023
Правки и улучшения
(Недостатки)
(Правки и улучшения)
 
Строка 1: Строка 1:
'''Unicode''' (Юникод) — единый международный стандарт преобразования букв различных алфавитов и символов в цифровое представление. Для этого каждому символу сопоставляется определенный порядковый номер.
'''Unicode''' (Юникод) — общепринятый международный стандарт, который позволяет преобразовать буквы разных языков и символы в цифровой вид. Для этого каждому символу присваивается уникальный номер. Благодаря Юникоду, пользователи могут свободно обмениваться информацией в [[Интернет|интернете]] на любом предпочитаемом языке.


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


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


'''Но неудобно'''. Когда нужно передать буквы из одного города в другой — их надо туда нести. А в провода буквы не влезают. Тогда пришлось кодировать уже буквы слов в виде последовательности коротких и длинных сигналов — так появилась '''азбука Морзе''' и всё было прекрасно! 🚢🆘
'''Но неудобно'''. Когда нужно передать буквы из одного города в другой — их надо туда нести. А в провода буквы не влезают. Тогда пришлось кодировать уже буквы слов в виде последовательности коротких и длинных сигналов — так появилась '''азбука Морзе''' и всё было прекрасно! 🚢🆘
Строка 15: Строка 15:
'''Но неудобно'''. Азбука Морзе передавала информацию медленно, сложно, неинтересно. С развитием компьютеров, она была заменена цифровым '''двоичным''' кодом. Где каждой букве была сопоставлена последовательность единиц и нулей. И всё было прекрасн0111
'''Но неудобно'''. Азбука Морзе передавала информацию медленно, сложно, неинтересно. С развитием компьютеров, она была заменена цифровым '''двоичным''' кодом. Где каждой букве была сопоставлена последовательность единиц и нулей. И всё было прекрасн0111


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


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


'''И удобно (пока).'''
'''И удобно?'''


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


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


Примеры символов Юникода:
Примеры символов Юникода:
Строка 34: Строка 34:
* 🐘 — [[Emoji|эмодзи]] слона 128024-й символ (U+1F418)
* 🐘 — [[Emoji|эмодзи]] слона 128024-й символ (U+1F418)


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


=== Главные достоинства ===
=== Главные достоинства ===


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


=== Зачем нужны кодировки UTF вместо UCS? ===
=== Зачем нужны кодировки UTF для Unicode? ===
Уже на примере слона 🐘 с номером 128024 видно что он очень большой и не влезает в 2 байта, нужно минимум три:
Уже на примере слона 🐘 с номером 128024 видно, что он очень большой и не влезает в 2 байта, нужно минимум три:


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


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


* '''UTF-8''' - кодировка переменной длины от 1 до 4 байт
* '''UTF-8''' - кодировка переменной длины от 1 до 4 байт
Строка 58: Строка 57:


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


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


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


* <code>0</code> = длина будет 1 байт
* <code>0</code> = длина будет 1 байт
Строка 69: Строка 68:
* <code>11110</code> = длина будет 4 байта
* <code>11110</code> = длина будет 4 байта


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


Итого:
Итого:


<code>[11110 '''000'''] [10 '''011111'''] [10 '''010000'''] [10 '''011000''']</code>
<code>[<s>11110</s> '''000'''] [<s>10</s> '''0<u>11111</u>'''] [<s>10</s> '''0<u>1</u>0000'''] [<s>10</s> '''0<u>11</u>000''']</code>


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


<code>000 011111 010000 011000</code>
<code>000 0<u>11111</u> 0<u>1</u>0000 0<u>11</u>000</code>


или  
или  


<code>[00000001] [11110100] [00011000]</code> = <code>1 F4 18</code>  = 128024
<code>[0000000<u>1</u>] [<u>1111</u>0<u>1</u>00] [000<u>11</u>000]</code> = <code>1 F4 18</code>  = 128024


что является 128024-й символом Юникода U+1F418 и должно отображаться на экране как эмодзи слона  
что является 128024-й символом Юникода U+1F418 и должно отображаться на экране как эмодзи слона  
Строка 87: Строка 86:
<code>🐘</code>
<code>🐘</code>


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


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