Могу ли я узнать точную разницу между Unicode и ASCII?
ASCII имеет в общей сложности 128 символов (256 в расширенном наборе).
Существует ли спецификация размера для символов Unicode?
Могу ли я узнать точную разницу между Unicode и ASCII?
ASCII имеет в общей сложности 128 символов (256 в расширенном наборе).
Существует ли спецификация размера для символов Unicode?
ASCII определяет 128 символов, которые соответствуют номерам 0–127. Unicode определяет (меньше) 2 21 символов, которые аналогично отображаются на номера 0–2 21 (хотя не все номера в настоящее время назначены, а некоторые зарезервированы).
Unicode - это расширенный набор ASCII, а числа 0–127 имеют то же значение в ASCII, что и 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
Некоторые умные люди начали использовать 8-й бит (бит, используемый для проверки четности) для кодирования большего количества символов для поддержки их языка (например, для "é", например, на французском). Просто использование одного дополнительного бита удвоило размер исходной таблицы 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. Юникод не содержит каждого символа из каждого языка, но он содержит огромное количество символов (см. Эту таблицу).
Вы не можете сохранить текст на жестком диске как "Юникод". Юникод - это абстрактное представление текста. Вам нужно "закодировать" это абстрактное представление. Это где кодировка вступает в игру.
Кодировки: 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 комбинаций. Думайте об этом как о кодовом замке с семью колесами, каждое колесо имеет только два числа.
Источник: Википедия и этот отличный пост в блоге.
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. Их связь с дефолтами операционной системы в значительной степени привлекает линии. Одной встречной мерой является определение спецификации, метки байтового заказа, специальной кодовой точки (U + FEFF, пространство нулевой ширины) в начале текстового потока, который указывает, как кодируется остальная часть потока. Он указывает как кодировку UTF, так и endianess и нейтрален для механизма текстового рендеринга. К сожалению, это необязательно, и многие программисты заявляют о своем праве их пропускать, поэтому несчастные случаи по-прежнему довольно распространены.
Java поддерживает Unicode, т.е. поддерживает все алфавиты по всему миру. Следовательно, размер символа в java составляет 2 байта. И диапазон от 0 до 65535.
ASCII и Unicode - это две кодировки символов. По сути, они являются стандартами того, как представлять разностные символы в двоичном формате, чтобы их можно было записывать, хранить, передавать и считывать на цифровых носителях. Основное различие между ними заключается в том, как они кодируют символ и количество битов, которые они используют для каждого. Первоначально ASCII использовал семь битов для кодирования каждого символа. Позже это было увеличено до восьми с расширенным ASCII для устранения очевидной неадекватности оригинала. Напротив, Unicode использует программу кодирования переменных битов, где вы можете выбирать между 32, 16 и 8-битными кодировками. Использование большего количества битов позволяет использовать больше символов за счет больших файлов, в то время как меньшее количество битов дает вам ограниченный выбор, но вы экономите много места. Использование меньшего количества битов (т.е. UTF-8 или ASCII), вероятно, было бы лучше, если вы кодируете большой документ на английском языке.
Одна из основных причин, почему 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 isnt.
3.Unicode represents most written languages in the world while ASCII does not.
4.ASCII has its equivalent within Unicode.
ASCII имеет 128 позиций кода, выделенных графическим символам и управляющим символам (управляющие коды).
Юникод имеет 1114 112 позиций кода. Около 100 000 из них в настоящее время выделены для символов, и многие кодовые точки были сделаны постоянно нехарактерами (т.е. Не используются для кодирования любого символа когда-либо), и большинство кодовых точек еще не назначены.
Единственными вещами, которые имеют ASCII и Unicode, являются: 1) они - коды символов. 2) 128 первых позиций кода Юникода были определены как те же значения, что и в ASCII, за исключением того, что позиции кода управляющих символов ASCII просто определены как обозначающие управляющие символы с именами, соответствующими их именам ASCII, но их значения не определен в Unicode.
Иногда, однако, Unicode характеризуется (даже в стандарте Unicode!) как "широкий ASCII". Это лозунг, который в основном пытается передать идею о том, что Unicode предназначен для универсального символьного кода так же, как и ASCII (хотя репертуар персонажа ASCII был безнадежно недостаточен для универсального использования), в отличие от использования разных кодов в различных систем и приложений и для разных языков.
Unicode как таковой определяет только "логический размер" символов: каждый символ имеет номер кода в определенном диапазоне. Эти кодовые номера могут быть представлены с использованием разных кодировок передачи, а внутри, в памяти символы Unicode обычно представлены с использованием одной или двух 16-разрядных величин на символ в зависимости от диапазона символов, иногда с использованием одного 32-битного количества на символ.
ASCII определяет 128 символов, так как Unicode содержит репертуар из более чем 120000 символов.
ASCII (Американский стандартный код для обмена информацией) является наиболее распространенным форматом текстовых файлов на компьютерах и в Интернете. В ASCII файле каждый алфавитный, числовой или специальный символ представляется с 7-битным двоичным числом (строка из семи 0 или 1 с). Определено 128 возможных символов.