В чем разница между текстом ASCII и Unicode?

ASCII и Unicode – это стандарты, которые относятся к цифровому представлению текста, в частности символов, составляющих текст. Однако эти два стандарта существенно различаются, и многие свойства отражают их соответствующий порядок создания.

Америка против Вселенной

Неудивительно, что Американский стандартный код обмена информацией (ASCII) обслуживает американскую аудиторию, пишущую английским алфавитом. Он работает с буквами без ударения, такими как AZ и az, а также с небольшим количеством знаков препинания и управляющих символов.

В частности, невозможно представить заимствованные слова, заимствованные из других языков, таких как « кафе» в кодировке ASCII, без преобразования их в английский язык путем замены акцентированных символов (например, « кафе» ). Локализованные расширения ASCII были разработаны для удовлетворения потребностей различных языков, но эти усилия затрудняли взаимодействие и явно ограничивали возможности ASCII.

Напротив, универсальный набор кодированных символов (Unicode) находится на противоположном конце шкалы амбиций. Unicode пытается удовлетворить как можно больше мировых систем письма, поскольку он охватывает древние языки и всеми любимый набор выразительных символов, эмодзи.

Набор символов или кодировка символов?

Проще говоря, набор символов – это набор символов (например, AZ), в то время как кодировка символов – это отображение между набором символов и значением, которое может быть представлено в цифровом виде (например, A = 1, B = 2).

Стандарт ASCII фактически является и тем, и другим: он определяет набор символов, которые он представляет, и метод сопоставления каждого символа с числовым значением.

Напротив, слово Unicode используется в нескольких разных контекстах для обозначения разных вещей. Вы можете думать об этом как о всеобъемлющем термине, таком как ASCII, для обозначения набора символов и ряда кодировок. Но поскольку существует несколько кодировок, термин Unicode часто используется для обозначения общего набора символов, а не для того, как они отображаются.

Размер

Из-за своего объема Unicode представляет гораздо больше символов, чем ASCII. Стандартный ASCII использует 7-битный диапазон для кодирования 128 различных символов . Юникод, с другой стороны, настолько велик, что нам нужно использовать другую терминологию, чтобы говорить об этом!

Unicode обслуживает 1111998 адресуемых кодовых точек. Кодовая точка примерно аналогична пространству, зарезервированному для символа, но ситуация намного сложнее, чем когда вы начинаете вникать в детали!

Более полезное сравнение – сколько скриптов (или систем записи) в настоящее время поддерживается. Конечно, ASCII обрабатывает только английский алфавит, в основном латинский или латинский алфавит. Версия Unicode, выпущенная в 2020 году, идет намного дальше: она поддерживает в общей сложности 154 скрипта.

Место хранения

7-битный диапазон ASCII означает, что каждый символ хранится в одном 8-битном байте; запасной бит не используется в стандартном ASCII. Это упрощает расчет размера: длина текста в символах – это размер файла в байтах.

Вы можете подтвердить это с помощью следующей последовательности команд bash. Сначала мы создаем файл, содержащий 12 букв текста:

 $ echo -n 'Hello, world' > foo

Чтобы проверить, что текст находится в кодировке ASCII, мы можем использовать команду file :

 $ file foo
foo: ASCII text, with no line terminators

Наконец, чтобы получить точное количество байтов, которое занимает файл, мы используем команду stat :

 $ stat -f%z foo
12

Поскольку стандарт Unicode имеет дело с гораздо большим диапазоном символов, файл Unicode, естественно, занимает больше места для хранения. Сколько именно зависит от кодировки.

Повторение того же набора команд, что и ранее, с использованием символа, который не может быть представлен в ASCII, дает следующее:

 $ echo -n '€' > foo
$ file foo
foo: UTF-8 Unicode text, with no line terminators
$ stat -f%z foo
3

Этот единственный символ занимает 3 байта в файле Unicode. Обратите внимание, что bash автоматически создал файл UTF-8, поскольку файл ASCII не может хранить выбранный символ (€). UTF-8 на сегодняшний день является наиболее распространенной кодировкой символов для Unicode; UTF-16 и UTF-32 – две альтернативные кодировки, но они используются гораздо реже.

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

ASCII – это Unicode, но Unicode – это не ASCII

Для обратной совместимости первые 128 кодовых точек Unicode представляют собой эквивалентные символы ASCII. Поскольку UTF-8 кодирует каждый из этих символов одним байтом, любой текст ASCII также является текстом UTF-8. Юникод – это надмножество ASCII.

Однако, как показано выше, многие файлы Unicode нельзя использовать в контексте ASCII. Любой символ, который находится за пределами поля, будет отображаться неожиданным образом, часто с замененными символами, которые полностью отличаются от тех, которые были предназначены.

Современное использование

Для большинства целей ASCII в значительной степени считается устаревшим стандартом. Даже в тех случаях, когда поддерживается только латинский алфавит – например, когда полная поддержка сложностей Unicode не требуется – обычно удобнее использовать UTF-8 и воспользоваться преимуществами его совместимости с ASCII.

В частности, веб-страницы следует сохранять и передавать с использованием UTF-8, который используется по умолчанию для HTML5. Это отличается от более ранней сети, которая по умолчанию использовала ASCII, прежде чем она была заменена на Latin 1.

Стандарт, который меняется

Последняя ревизия ASCII состоялась в 1986 году.

В отличие от этого, Unicode продолжает обновляться ежегодно. Регулярно добавляются новые сценарии, персонажи и особенно новые смайлы. При выделении лишь небольшой части из них полный набор символов, вероятно, будет расти и развиваться в обозримом будущем.

Связанный: Объяснение 100 самых популярных эмодзи

ASCII против Unicode

ASCII служил своей цели в течение многих десятилетий, но теперь Unicode фактически заменил его для всех практических целей, кроме устаревших систем. Юникод крупнее и, следовательно, выразительнее. Он представляет собой глобальные совместные усилия и предлагает гораздо большую гибкость, хотя и за счет некоторой сложности.