Домашняя » как » Почему английским символам нужно меньше байтов для их представления, чем символам в других алфавитах?

    Почему английским символам нужно меньше байтов для их представления, чем символам в других алфавитах?

    Хотя большинство из нас, вероятно, никогда не задумывались над этим, буквенные символы имеют разный размер в количестве байтов, которое требуется для их представления. Но почему это? Сегодняшний пост SuperUser Q & A содержит ответы на любопытный вопрос читателя..

    Сегодняшняя сессия вопросов и ответов пришла к нам благодаря SuperUser - подразделению Stack Exchange, группе веб-сайтов вопросов и ответов, управляемой сообществом..

    Неполный скриншот ASCII Chart предоставлен Wikipedia.

    Вопрос

    Хайва-читатель SuperUser хочет знать, почему разные алфавиты при сохранении занимают разное количество дискового пространства:

    Когда я помещаю 'a' в текстовый файл и сохраняю его, он имеет размер 2 байта. Но когда я вставляю символ типа «ա» (буква от армянского алфавита), он становится размером 3 байта.

    В чем разница между алфавитами на компьютере? Почему английский занимает меньше места при сохранении?

    Буквы это буквы, верно? Возможно, нет! Каков ответ на эту алфавитную тайну?

    Ответ

    Участники SuperUser Doktoro Reichard и ernie имеют ответ для нас. Прежде всего, Доктор Рейхард:

    Одной из первых схем кодирования, которая будет разработана для использования в основных компьютерах, является ASCII (Американский стандартный код для обмена информацией) стандарт. Он был разработан в 1960-х годах в Соединенных Штатах..

    Английский алфавит использует часть латинского алфавита (например, в английском языке мало акцентированных слов). В этом алфавите 26 отдельных букв, не учитывая регистр. И в любой схеме, которая претендует на кодирование английского алфавита, должны были бы существовать отдельные цифры и знаки препинания..

    1960-е годы были также временем, когда у компьютеров не было того объема памяти или дискового пространства, который есть у нас сейчас. ASCII был разработан, чтобы быть стандартным представлением функционального алфавита на всех американских компьютерах. В то время решение сделать каждый символ ASCII длиной 8 бит (1 байт) было принято из-за технических деталей того времени (статья в Википедии упоминает тот факт, что перфорированная лента удерживала 8 битов в позиции за раз). Фактически, исходная схема ASCII может передаваться с использованием 7 битов, а восьмой может использоваться для проверок четности. Более поздние разработки расширили исходную схему ASCII, включив в нее несколько акцентированных, математических и терминальных символов..

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

    Unicode возник как решение для существования различных терминалов путем объединения всех возможных значимых символов в один абстрактный набор символов.

    UTF-8 - это один из способов кодирования набора символов Unicode. Это кодирование переменной ширины (т.е. разные символы могут иметь разные размеры), и оно было разработано для обратной совместимости с прежней схемой ASCII. Таким образом, набор символов ASCII останется размером в один байт, а все остальные символы имеют размер два или более байтов. UTF-16 - это еще один способ кодирования набора символов Unicode. По сравнению с UTF-8 символы кодируются как набор из одной или двух 16-битных кодовых единиц..

    Как указано в других комментариях, символ «a» занимает один байт, а символ «ա» занимает два байта, обозначая кодировку UTF-8. Дополнительный байт в исходном вопросе был связан с существованием символа новой строки в конце.

    Далее следует ответ Эрни:

    1 байт равен 8 битам и может представлять до 256 (2 ^ 8) различных значений.

    Для языков, которые требуют больше возможностей, чем это, простое сопоставление 1 к 1 не может поддерживаться, поэтому для хранения символа требуется больше данных.

    Обратите внимание, что обычно в большинстве кодировок используются первые 7 бит (128 значений) для символов ASCII. Это оставляет 8-й бит или еще 128 значений для большего количества символов. Добавьте акцентированные символы, азиатские языки, кириллицу и т. Д., И вы легко поймете, почему 1 байт недостаточно для хранения всех символов.


    Есть что добавить к объяснению? Отключить звук в комментариях. Хотите узнать больше ответов от других технически подкованных пользователей Stack Exchange? Ознакомьтесь с полным обсуждением здесь.