Яка точна різниця між Unicode та ASCII?
ASCII має загалом 128 символів (256 у розширеному наборі).
Чи є специфікація розміру для символів Unicode?
Яка точна різниця між Unicode та ASCII?
ASCII має загалом 128 символів (256 у розширеному наборі).
Чи є специфікація розміру для символів Unicode?
Відповіді:
ASCII визначає 128 символів, які позначаються на числах 0–127. Unicode визначає (менше) 2 21 символів, які аналогічно відображаються на числах 0-22 21 (хоча в даний час не всі числа присвоєні, а деякі зарезервовані).
Unicode - це набір ASCII, і цифри 0–127 мають те саме значення, що й у Unicode. Наприклад, число 65 означає "латинська столиця" А ".
Оскільки символи Unicode зазвичай не вписуються в один 8-бітний байт, існує безліч способів зберігання символів Unicode в послідовностях байтів, таких як UTF-32 і UTF-8.
Розуміння, чому ASCII і Unicode створені в першу чергу, допомогло мені зрозуміти відмінності між ними.
ASCII, Походження
Як зазначено в інших відповідях, ASCII використовує 7 біт для представлення символу. Використовуючи 7 біт, ми можемо мати максимум 2 ^ 7 (= 128) різних комбінацій * . Що означає, що ми можемо представляти максимум 128 символів.
Зачекайте, 7 біт? Але чому б не 1 байт (8 біт)?
Останній біт (8-й) використовується для уникнення помилок як біт парності . Це було актуально років тому.
Більшість символів ASCII - це символи для друку алфавіту, такі як abc, ABC, 123,? & !, тощо. Інші - це контрольні символи, такі як повернення каретки, подача рядків , вкладка тощо.
Дивіться нижче двійкове представлення кількох символів в ASCII:
0100101 -> % (Percent Sign - 37)
1000001 -> A (Capital letter A - 65)
1000010 -> B (Capital letter B - 66)
1000011 -> C (Capital letter C - 67)
0001101 -> Carriage Return (13)
Повну таблицю ASCII дивіться тут .
ASCII призначався лише для англійської мови.
Що? Чому лише англійською? Стільки мов там!
Тому що центр комп’ютерної індустрії був у той час у США. Як наслідок, їм не потрібно було підтримувати наголоси або інші знаки, такі як á, ü, ç, ñ тощо (також діакритики ).
ASCII Extended
Деякі розумні люди почали використовувати восьмий біт (біт, що використовується для паритету), щоб кодувати більше символів для підтримки їх мови (для підтримки "é", наприклад, французькою мовою). Просто за допомогою одного зайвого біта вдвічі збільшився розмір вихідної таблиці ASCII для відображення до 256 символів (2 ^ 8 = 256 символів). І не 2 ^ 7, як раніше (128).
10000010 -> é (e with acute accent - 130)
10100000 -> á (a with acute accent - 160)
Назва для цього "ASCII поширюється на 8 біт, а не на 7 біт, як раніше", можна просто називати "розширеним ASCII" або "8-бітним ASCII".
Як @Tom зазначив у своєму коментарі нижче, немає такого поняття, як " розширений ASCII ", але це простий спосіб посилатися на цей 8-бітний трюк. Існує багато варіацій 8-бітної таблиці ASCII, наприклад, ISO 8859-1, який також називається ISO Latin-1 .
Unicode, The Rise
ASCII Extended вирішує проблему для мов, заснованих на латинському алфавіті ... а що з іншими, які потребують зовсім іншого алфавіту? Грецька? Російський? Китайці та подібні?
Нам знадобився б абсолютно новий набір символів ... це раціонально за Unicode. Unicode не містить кожного символу з кожної мови, але він обов'язково містить гігантську кількість символів ( див. Цю таблицю ).
Ви не можете зберегти текст на жорсткому диску як "Unicode". Unicode - це абстрактне подання тексту. Вам потрібно «кодувати» це абстрактне подання. Ось тут і грає кодування .
Кодування: UTF-8 проти UTF-16 проти UTF-32
Ця відповідь робить досить непогану роботу з пояснення основ:
UTF-8 використовує набір ASCII для перших 128 символів. Це зручно, оскільки це означає, що текст ASCII також дійсний у UTF-8.
Мнемоніка:
Примітка:
Чому 2 ^ 7?
Для деяких це очевидно, але про всяк випадок. У нас є сім слотів, заповнених або 0, або 1 ( Бінарний код ). Кожна може мати дві комбінації. Якщо у нас сім плям, ми маємо 2 * 2 * 2 * 2 * 2 * 2 * 2 = 2 ^ 7 = 128 комбінацій. Подумайте про це як комбінований замок із семи колесами, кожне колесо має лише два числа.
Джерело: Вікіпедія , цей чудовий пост у блозі та Mocki, де я спочатку розмістив це резюме.
ASCII має 128 кодових точок, від 0 до 127. Він може вміщуватися в одному 8-бітовому байті, значення 128 - 255 зазвичай використовуються для інших символів. З несумісним вибором, що спричиняє катастрофу на кодовій сторінці . Текст, закодований на одній кодовій сторінці, не може правильно прочитати програма, яка припускає чи здогадується на іншій сторінці коду.
Unicode зібрався вирішити цю катастрофу. Версія 1 розпочалася з 65536 кодових очок, які зазвичай кодуються у 16 бітах. Пізніше розширено у версії 2 до 1,1 мільйона кодових пунктів. Поточна версія - 6.3, використовуючи 110 187 доступних 1,1 мільйона кодових балів. Це більше не вміщується в 16 біт.
Кодування в 16 бітах було звичайним явищем, коли з'явилася версія v2, яка використовується, наприклад, операційними системами Microsoft та Apple. І мови виконання, як Java. Специфікація v2 придумала спосіб зіставити ці 1,1 мільйона кодових точок на 16 біт. Кодування під назвою UTF-16, кодування змінної довжини, де одна кодова точка може приймати або 2, або 4 байти. Оригінальні точки коду v1 беруть 2 байти, а додані - 4.
Ще одне поширене кодування змінної довжини, яке використовується в операційних системах і інструментах * nix, це UTF-8, кодова точка може займати від 1 до 4 байт, оригінальні коди ASCII займають 1 байт, решта займають більше. Єдине кодування без змінної довжини - UTF-32, займає 4 байти для кодової точки. Не часто використовується, оскільки досить марнотратний. Є й інші, наприклад UTF-1 та UTF-7, широко ігноровані.
Проблема з кодуванням UTF-16/32 полягає в тому, що порядок байтів буде залежати від нестабільності машини, яка створила текстовий потік. Тому додайте до суміші UTF-16BE, UTF-16LE, UTF-32BE та UTF-32LE.
Наявність цих різних варіантів кодування до деякої міри повертає катастрофу на кодовій сторінці, а також бурхливі дебати серед програмістів, для яких вибір UTF є "найкращим". Їх зв'язок із типовими налаштуваннями операційної системи в значній мірі накреслює межі. Один зустрічний захід - це визначення BOM, позначки порядку байтів, спеціальної кодової точки (U + FEFF, пробіл нульової ширини) на початку текстового потоку, що вказує, як кодується решта потоку. Він позначає як кодування UTF, так і ендіастичність і є нейтральним до механізму візуалізації тексту. На жаль, це не є обов'язковим, і багато програмістів заявляють про своє право опускати його, тому нещасні випадки все ще досить поширені.
java забезпечує підтримку Unicode, тобто він підтримує всі алфавіти у всьому світі. Отже, розмір char в java - 2 байти. А діапазон - від 0 до 65535.
ASCII має 128 кодових позицій, виділених графічним символам та керуючим символам (контрольні коди).
Unicode має 1,114,112 позицій коду. Наразі близько 100 000 з них виділено символам, і багато кодових пунктів стали постійно нехарактерними (тобто не використовуються для кодування жодного символу ніколи), а більшість кодових точок ще не присвоєні.
Єдине, що ASCII і Unicode мають загального , є: 1) Вони є коди символів. 2) 128 перших позицій коду Unicode були визначені такими ж значеннями, як і в ASCII, за винятком того, що позиції коду символів керування ASCII просто визначені як позначення керуючих символів, імена яких відповідають їх іменам ASCII, але їх значення не визначено в Unicode.
Однак іноді Unicode характеризується (навіть у стандарті Unicode!) Як "широкий ASCII". Це гасло, яке в основному намагається передати ідею про те, що Unicode мається на увазі як універсальний код символів так само, як колись був ASCII (хоча репертуар символів ASCII був безнадійно недостатнім для універсального використання), на відміну від використання різних кодів у різні системи та програми та для різних мов.
Unicode як такий визначає лише "логічний розмір" символів: Кожен символ має кодове число у певному діапазоні. Ці кодові номери можуть бути представлені за допомогою різних кодувань передачі, і всередині пам'яті символи Unicode зазвичай представлені за допомогою однієї або двох 16-бітних величин на символ, залежно від діапазону символів, іноді використовуючи одну 32-бітну кількість на символ.
ASCII і Unicode - це два кодові символи. В основному, вони є стандартами щодо представлення різницьких символів у двійковій формі, щоб їх можна було записати, зберігати, передавати та читати в цифрових носіях. Основна відмінність між ними полягає в тому, як вони кодують символ та кількість бітів, які вони використовують для кожного. ASCII спочатку використовував сім біт для кодування кожного символу. Пізніше це було збільшено до восьми з розширеним ASCII для усунення явної неадекватності оригіналу. На відміну від цього, Unicode використовує змінну програму кодування бітів, де ви можете вибрати між 32, 16 та 8-бітовими кодуваннями. Використання більшої кількості бітів дозволяє використовувати більше символів за рахунок більших файлів, тоді як менша кількість бітів надає вам обмежений вибір, але ви економите багато місця. Використання меншої кількості бітів (тобто
Однією з головних причин, чому Unicode була проблема, виникла з-за багатьох нестандартних розширених програм ASCII. Якщо ви не використовуєте розповсюджену сторінку, яку використовують Microsoft та більшість інших програмних компаній, ви, швидше за все, зіткнетесь із проблемами, коли ваші персонажі з’являються як вікна. Unicode практично усуває цю проблему, оскільки всі точки коду символів були стандартизовані.
Ще одна основна перевага Unicode полягає в тому, що він на максимумі може вмістити величезну кількість символів. Через це Unicode наразі містить більшість письмових мов і все ще має місце для ще більше. Сюди входять типові сценарії зліва направо на зразок англійської мови та навіть сценарії справа-вліво, такі як арабська. Китайський, японський та багато інших варіантів також представлені в Unicode. Тож Unicode не буде замінено найближчим часом.
З метою підтримання сумісності зі старішою ASCII, яка на той час уже широко використовувалась, Unicode був розроблений таким чином, що перші вісім біт відповідали найбільш популярній сторінці ASCII. Отже, якщо ви відкриєте кодований файл ASCII за допомогою Unicode, ви все одно отримаєте правильні символи, закодовані у файлі. Це полегшило прийняття Unicode, оскільки зменшило вплив прийняття нового стандарту кодування для тих, хто вже використовував ASCII.
Підсумок:
1.ASCII uses an 8-bit encoding while Unicode uses a variable bit encoding.
2.Unicode is standardized while ASCII isn’t.
3.Unicode represents most written languages in the world while ASCII does not.
4.ASCII has its equivalent within Unicode.
Дані цифри призначені лише для зберігання 1 символу
ASCII визначає 128 символів, оскільки Unicode містить репертуар з більш ніж 120 000 символів.
Крім того, як UTF є надмножиною ASCII, ще одна хороша відмінність між ASCII та UTF полягає в кодуванні файлів диска, представленні та зберіганні даних у випадковій пам'яті. Програми знають, що дані слід розуміти як рядок ASCII або UTF або шляхом виявлення спеціальних кодів байт порядку замовлення на початку даних, або шляхом припущення із наміру програміста, що дані є текстовим, а потім перевірки на наявність шаблонів, які вказують на це в одному чи іншому кодуванні тексту.
Використовуючи традиційне позначення префікса 0x
для шістнадцяткових даних, основним хорошим посиланням є те, що текст ASCII починається з байтових значень 0x00
до 0x7F
представлення одного з можливих знаків символів ASCII . Текст UTF зазвичай вказується, починаючи з байтів 0xEF 0xBB 0xBF
для UTF8. Для UTF16 запустіть байти 0xFE 0xFF
або0xFF 0xFE
використовуйте їх з -ності текстових байтів, зазначеним порядком початкових байтів. Проста наявність значень байтів, які не знаходяться в діапазоні ASCII можливих значень байтів, також вказує на те, що дані, ймовірно, є UTF.
Існують і інші позначки порядку байтів, які використовують різні коди для вказівки, що дані слід інтерпретувати як текст, кодований у певному стандарті кодування.