Чому англійські символи потребують меншої кількості байтів для представлення їх, ніж символів в інших алфавітах?
Хоча більшість з нас, ймовірно, ніколи не зупинялися, щоб думати про це, алфавітні символи не всі однаковий розмір в кількості байтів, необхідних для їх представлення. Але чому це так? Сьогоднішня посада SuperUser Q&A має відповіді на запитання цікавого читача.
Сьогоднішня сесія запитань та відповідей приходить до нас люб'язно SuperUser - підрозділ Stack Exchange, групування веб-сайтів із запитаннями та відповідями на рівні спільноти..
Часткове знімок екрану ASCII надано Вікіпедією.
Питання
Читач khajvah 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. Додатковий байт в оригінальному питанні був пов'язаний з існуванням символу нового рядка в кінці.
Далі йде відповідь від ernie:
1 байт становить 8 біт і, таким чином, може представляти до 256 (2 ^ 8) різних значень.
Для мов, для яких потрібні більше можливостей, неможливо підтримувати просте від 1 до 1 відображення, тому для зберігання символу потрібно більше даних.
Зауважимо, що зазвичай більшість кодувань використовують перші 7 біт (128 значень) для символів ASCII. Це залишає 8-й біт, або 128 більше значень для більше символів. Додайте в акцентованих символах, азіатських мовах, кирилиці і т.д., і ви можете легко зрозуміти, чому 1 байт не достатньо для утримання всіх символів.
Маєте щось додати до пояснення? Звучить в коментарях. Хочете прочитати більше відповідей від інших технологічних користувачів Stack Exchange? Перегляньте повний потік обговорення тут.