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

могу ли я знать точную разницу между Unicode и ASCII?

ASCII имеет в общей сложности 128 символов (256 в расширенном наборе).

есть ли спецификация размера для символов Unicode?

7 ответов


ASCII определяет 128 символов, которые сопоставляются с числами 0-127. Unicode определяет (меньше) 221 символы, которые аналогично сопоставляются с числами 0-221 (хотя не все номера в настоящее время назначены, а некоторые зарезервированы).

Unicode является надмножеством ASCII, и числа 0-128 имеют то же значение в ASCII, что и в Unicode. Например, число 65 означает "Латинская столица "а"".

потому что символы Юникода не обычно помещается в один 8-битный байт, существует множество способов хранения символов Юникода в байтовых последовательностях, таких как UTF-32 и UTF-8.


понимание почему ASCII и Unicode были созданы в первую очередь помогли мне понять как они на самом деле работают.

ASCII, Origins

как указано в других ответах, ASCII использует 7 бит для представления символа. Используя 7 бит, мы можем иметь максимум 2^7 (= 128) различных комбинаций*. Это означает, что мы можем представить 128 символов.

подождите, 7 биты? Но почему не 1 байт (8 бит)?

последний бит (8-й) используется для избежания ошибок как бит четности. Это было актуально много лет назад.

большинство символов ASCII являются печатными символами алфавита, такими как abc, ABC, 123,?&!, п. Остальные символы например возврата каретки, перевода строки, tab, etc.

смотрите ниже двоичное представление нескольких символов в 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

некоторые умные люди начали использовать 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".

As @Tom указал в своем комментарии ниже нет такой вещи, как"расширенный ASCII" тем не менее, это простой способ обратиться к этому 8-битному трюку. Существует множество вариантов 8-битной таблицы ASCII, например ISO 8859-1, также называемый ISO Latin-1.

Unicode, The Rise

ASCII Extended решает проблема для языков, которые основаны на латинском алфавите... а как насчет других, которым нужен совершенно другой алфавит? Греческий? Русский? Китайский и тому подобное?

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

вы не можете сохранить текст на жесткий диск как "Unicode". Unicode-это абстрактное представление текста. Вам нужно "закодировать" это абстрактное представление. Вот где кодирование вступает в игру.

кодировки: UTF-8 vs UTF-16 vs UTF-32

ответ делает довольно хорошую работу по объяснению основ:

  • UTF-8 и UTF-16 кодировки переменной длины.
  • в UTF-8 символ может занимать не менее 8 бит.
  • In UTF-16, длина символа начинается с 16 бит.
  • UTF-32-кодировка фиксированной длины в 32 бита.

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

Мнемоника:

  • UTF -8: минимум 8 бит.
  • UTF -16: минимум 16 бит.
  • UTF -32: минимум и максимум 32 бит.

Примечание:

почему 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 битах. Later extended в версии 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 является "лучшим". Их связь с операционной системой по умолчанию в значительной степени рисует линии. Один counter-measure-это определение спецификации, метка порядка байтов, специальная кодовая точка (U+FEFF, пространство нулевой ширины) в начале текстового потока, которая указывает, как кодируется остальная часть потока. Он указывает как кодировку UTF, так и endianess и нейтрален к движку рендеринга текста. К сожалению, это необязательно, и многие программисты заявляют о своем праве опустить его, поэтому несчастные случаи все еще довольно распространены.


ASCII имеет 128 позиций кода, выделенных графическим символам и управляющим символам (управляющим кодам).

Unicode имеет 1,114,112 кодовых позиций. Около 100 000 из них в настоящее время были выделены символам, и многие кодовые точки были сделаны постоянно нехарактерными (т. е. никогда не использовались для кодирования какого-либо символа), и большинство кодовых точек еще не назначены.

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

Иногда, однако, Unicode характеризуется (даже в стандарте Unicode!) как "широкий ASCII". Это слоган, который в основном пытается передать идею, что Unicode предназначен для будь универсальная символьный код так же, как когда-то ASCII (хотя репертуар символов ASCII был безнадежно недостаточен для универсального использования), в отличие от использования разных кодов в разных системах и приложениях и для разных языков.

Unicode как таковой определяет только "логический размер" символов: каждый символ имеет кодовый номер в определенном диапазоне. Эти кодовые номера можно представить используя различные кодировки передачи, и внутренне, внутри память, символы Юникода обычно представлены с использованием одного или двух 16-разрядных величин на символ, в зависимости от диапазона символов, иногда с использованием одного 32-разрядного количества на символ.


java обеспечивает поддержку Unicode i.e он поддерживает все Всемирные алфавиты. Следовательно, размер char в java составляет 2 байта. И диапазон от 0 до 65535.

enter image description here


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

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

еще одно важное преимущество Unicode заключается в том, что на максимуме он может вместить огромное количество символов. Из-за этого Unicode в настоящее время содержит большинство письменных языков и все еще есть место и для большего. Это включает в себя типичные слева направо скрипты, такие как английский и даже справа налево скрипты, такие как арабский. Китайский, японский, и многие другие варианты также представлены в Юникоде. Таким образом, Unicode не будет заменен в ближайшее время.

для поддержания совместимости со старым ASCII, который уже широко использовался в то время, Unicode был разработан таким образом, что первые восемь битов соответствовали наиболее популярной странице ASCII. Поэтому, если вы откроете ASCII кодированный файл с 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.

Взято Из: http://www.differencebetween.net/technology/software-technology/difference-between-unicode-and-ascii/#ixzz4zEjnxPhs


ASCII определяет 128 символов, так как Unicode содержит репертуар из более чем 120 000 символов.