ASCII: различия между версиями
[непроверенная версия] | [непроверенная версия] |
м откат правок 185.185.254.227 (обс.) к версии Игорь Темиров Метка: откат |
Небольшие корректировки |
||
(не показано 15 промежуточных версий 3 участников) | |||
Строка 2: | Строка 2: | ||
{{falseredirect|ISO 646}} |
{{falseredirect|ISO 646}} |
||
{{Технологический стандарт}} |
{{Технологический стандарт}} |
||
'''ASCII''' ({{lang-en|'''A'''merican ''' |
'''ASCII''' ({{lang-en|'''A'''merican '''S'''tandard '''C'''ode for '''I'''nformation '''I'''nterchange}}, {{МФА2|ˈ|æ|s|.|k|i}}<ref>{{Cite web|url=http://dictionary.cambridge.org/dictionary/english/ascii?q=ASCII|title=ASCII|website=The Cambridge English Dictionary|publisher=dictionary.cambridge.org|lang=en|accessdate=2018-04-09|archive-date=2017-09-27|archive-url=https://web.archive.org/web/20170927202158/http://dictionary.cambridge.org/dictionary/english/ascii?q=ASCII|deadlink=no}}</ref>) — стандарт кодирования букв латинского алфавита, цифр, некоторых специальных знаков и [[Управляющие символы|управляющих символов]], принятый в 1963 году [[Американский национальный институт стандартов|Американской ассоциацией стандартов]] как основной способ представления текстовых данных в [[ЭВМ]]{{sfn|Mackenzie|1980|p=211}}. |
||
Во избежание путаницы с [[#Национальные варианты и расширения|национальными вариантами]] ASCII, используемыми в других странах, [[IANA]] рекомендует обозначать оригинальный вариант кода как US-ASCII<ref>{{cite web |author=[[Internet Assigned Numbers Authority]] |url=https://www.iana.org/assignments/character-sets/character-sets.xhtml |title=Character Sets |lang=en |access-date=2024-11-18 |url-status=live |archive-url=https://web.archive.org/web/20241116085551/https://www.iana.org/assignments/character-sets/character-sets.xhtml |archive-date=2024-11-16}}</ref>. |
|||
== Описание == |
== Описание == |
||
[[Файл:ASCII Code Chart.svg|thumb|369x369px| |
[[Файл:ASCII Code Chart.svg|thumb|369x369px|Кодовая таблица ASCII]] |
||
Стандарт ASCII представляет собой |
Стандарт ASCII представляет собой 7-[[бит]]ный код без рекомендаций относительно контроля чётности, содержащий 2<sup>7</sup> = 128 кодовых позиций{{sfn|Иллингуорт|1990|с=28}}, в которых размещены следующие символы: |
||
* [[Десятичная система счисления| |
* [[Десятичная система счисления|десятичные цифры]]; |
||
* [[Латинский алфавит| |
* [[Латинский алфавит|латинские буквы]]; |
||
* [[Знак препинания|знаки препинания]]; |
|||
* национального алфавита{{переход|#Национальные варианты ASCII}}; |
|||
* [[Небуквенный орфографический знак|орфографические знаки]]; |
|||
* [[Знак препинания|знаков препинания]]; |
|||
* [[ |
* [[математические символы]]; |
||
* [[управляющие символы]]. |
|||
== История == |
== История == |
||
С развитием вычислительной техники и [[Язык программирования|языков программирования]] возможностей |
С развитием вычислительной техники и [[Язык программирования|языков программирования]] возможностей [[телетайп]]ного кода [[ITA2]] стало не хватать, что вынуждало производителей ЭВМ создавать расширения для ITA2 или же свои собственные коды. Кроме того, для записи на [[Перфокарта|перфокарты]] использовались различные варианты {{iw|Код Холлерита|кода Холлерита|en|Hollerith code}}. Таким образом, к началу 1960-х годов существовало достаточно большое количество кодировок латиницы, используемых как для передачи по линиям связи, так и для записи на носители — магнитную ленту, перфоленту и перфокарты, — таких как ITA2, {{iw|FIELDATA}}, различные варианты [[BCDIC]] и т. д.{{sfn|Mackenzie|1980|p=61}}, причём даже в рамках одной и той же кодировки один код мог соответствовать различным символам в зависимости от модели и назначения устройства. Чтобы решить эту проблему, 4 августа 1960 года был создан комитет X3.2 (как часть комитета X3, сформированного 13 января того же года){{sfn|Fischer|2000|p=11}}, в который вошли представители компаний [[IBM]] (в частности, {{iw|Бемер, Роберт Уильям|Роберт Бемер|en|Bob Bemer}}), [[AT&T]], [[Bell Labs]] и других. |
||
Работа по созданию ASCII началась 6 октября 1960 года{{sfn|Fischer|2000|p=11}}, и 17 июня 1963 года, почти 3 года спустя, была опубликована его первая редакция (ASA X3.4-1963){{sfn|Fischer|2000|p=21}}. В ней отсутствовали [[Строчная буква|строчные буквы]], а область из 28 кодовых позиций {{0x|60}}—{{0x|7B}} была зарезервирована для дальнейшего использования{{sfn|Mackenzie|1980|p=66}}{{sfn|Mackenzie|1980|p=245—246}}. Велись споры о том, использовать эту область для добавления строчных букв или же управляющих символов. |
|||
В 1965 году была подготовлена новая редакция ASCII (ASA X3.4-1965), которая, однако, так и не была опубликована и не использовалась нигде, кроме терминалов [[IBM 2260|IBM 2260/2848]] и принтеров IBM 1053 (да и то без строчных букв и некоторых других символов){{sfn|Mackenzie|1980|p=423—428}}. Следующая редакция ASCII (USAS X3.4-1967) была опубликована 5 июля 1967 года и определила окончательную кодовую таблицу{{sfn|Fischer|2000|p=28}}. Новые редакции ASCII продолжили выходить и далее (USAS X3.4-1968, ANSI X3.4-1977, ANSI X3.4-1986), однако кодовую таблицу изменения в них |
В 1965 году была подготовлена новая редакция ASCII (ASA X3.4-1965), которая, однако, так и не была опубликована и не использовалась нигде, кроме терминалов [[IBM 2260|IBM 2260/2848]] и принтеров IBM 1053 (да и то без строчных букв и некоторых других символов){{sfn|Mackenzie|1980|p=423—428}}. Следующая редакция ASCII (USAS X3.4-1967) была опубликована 5 июля 1967 года и определила окончательную кодовую таблицу{{sfn|Fischer|2000|p=28}}. Новые редакции ASCII продолжили выходить и далее (USAS X3.4-1968, ANSI X3.4-1977, ANSI X3.4-1986 и т. д.), однако кодовую таблицу изменения в них более не затрагивали. |
||
В целом, внедрение ASCII долгое время саботировалось компанией IBM, отдававшей предпочтение собственной кодировке [[EBCDIC]], являющейся дальнейшим развитием кодировки BCDIC, также созданной IBM и основанной, в свою очередь, на коде Холлерита{{sfn|Fischer|2000|p=21}}. |
В целом, внедрение ASCII долгое время саботировалось компанией IBM, отдававшей предпочтение собственной кодировке [[EBCDIC]], являющейся дальнейшим развитием кодировки BCDIC, также созданной IBM и основанной, в свою очередь, на коде Холлерита{{sfn|Fischer|2000|p=21}}. |
||
Со временем стали появляться производные кодировки с задействованным 8-м битом (2<sup>8</sup> = 256 символов), первые 128 символов которых совпадают с ASCII (например, [[КОИ-8]], [[ISO 8859]]). Подобные ASCII-совместимые 8-битные кодировки стали называться «расширенной ASCII», а сама ASCII — восприниматься как их первая (младшая) половина. |
|||
== Структурные свойства таблицы == |
== Структурные свойства таблицы == |
||
Первая |
Первая редакция ASCII содержала 36 управляющих символов, пробел, 10 арабских цифр, 26 заглавных латинских букв и 27 специальных символов, подразделяемых на группы{{sfn|Mackenzie|1980|p=240}}: |
||
* 8 знаков препинания (<code>.</code><code>,</code><code>:</code><code>;</code><code>!</code><code>?</code><code>'</code><code>"</code>); |
* 8 знаков препинания (<code>.</code>, <code>,</code>, <code>:</code>, <code>;</code>, <code>!</code>, <code>?</code>, <code>'</code>, <code>"</code>); |
||
* 5 знаков для финансовых и биржевых операций (<code>#</code><code>$</code><code>%</code><code>&</code><code>@</code>); |
* 5 знаков для финансовых и биржевых операций (<code>#</code>, <code>$</code>, <code>%</code>, <code>&</code>, <code>@</code>); |
||
* 2 пары скобок (<code>(</code><code>)</code><code>[</code><code>]</code>); |
* 2 пары скобок (<code>(</code>, <code>)</code>, <code>[</code>, <code>]</code>); |
||
* 8 математических символов (<code>+</code><code>-</code><code>*</code><code>/</code><code>\</code><code>=</code><code><</code><code>></code>) |
* 8 математических символов (<code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>, <code>\</code>, <code>=</code>, <code><</code>, <code>></code>){{efn|В качестве знаков [[Знак умножения|умножения]] (×) и [[Знак деления|деления]] (÷) было решено использовать [[астериск]] (*) и [[Косая черта|косую черту]] (/).}}; |
||
* 2 стрелки для блок-схем |
* 2 стрелки для блок-схем (<code>↑</code>, <code>←</code>). |
||
Cимвол «подушка» (<code>⌑</code>), имевшийся в наборе доступных символов многих печатающих устройств того времени и присутствовавший в кодировках |
Cимвол «подушка» (<code>⌑</code>), имевшийся в наборе доступных символов многих печатающих устройств того времени и присутствовавший в кодировках BCDIC, FIELDATA и др., ни в одну из редакций ASCII не вошёл. |
||
В |
В редакции 1967 года был пересмотрен (сокращён до 33) набор управляющих символов и убраны стрелки, а также добавлены строчные буквы и 7 дополнительных символов (<code>^</code>, <code>_</code>, <code>`</code>, <code>{</code>, <code>|</code>, <code>}</code>, <code>~</code>), после чего кодовая таблица приняла окончательный вид{{sfn|Mackenzie|1980|p=246—247}}: |
||
{{anchor|ASCII_Table}} |
{{anchor|ASCII_Table}} |
||
{| class="wikitable" style="text-align:center; font-family:monospace" |
{| class="wikitable" style="text-align:center; font-family:monospace" |
||
|+ Кодовая таблица ASCII (начиная с редакции USAS X3.4-1967) |
|||
|+ Таблица ASCII |
|||
|- |
|- |
||
! width="4%" | |
! width="4%" | |
||
! width="6%" | .0 || width="6%" | .1 |
! width="6%" | .0 || width="6%" | .1 |
||
! width="6%" | .2 || width="6%" | .3 |
! width="6%" | .2 || width="6%" | .3 |
||
Строка 55: | Строка 56: | ||
|- |
|- |
||
! 2. |
! 2. |
||
| |
| || ! || " || # || $ || % || & || ' || ( || ) || * || + || , || - || . || / |
||
|- |
|- |
||
! 3. |
! 3. |
||
Строка 74: | Строка 75: | ||
|} |
|} |
||
Все символы в ASCII делятся на 4 группы по 32 символа{{sfn|Mackenzie|1980|p=237}}: |
Все символы в ASCII делятся на 4 группы по 32 символа{{sfn|Mackenzie|1980|p=237}}: |
||
# [[#Управляющие символы]] |
# [[#Управляющие символы|Управляющие символы]] предназначены для управления передачей и выводом текста на терминал{{sfn|Mackenzie|1980|p=234}}. Группа начинается с символа [[#NUL|NUL]] ({{0x|00}}), означающего незаписанный участок, например, перфоленты, и игнорируемого при выводе на экран или на печать{{sfn|Mackenzie|1980|p=235}}. За пределами группы, в конце таблицы также располагается символ [[#DEL|DEL]] ({{0x|7F}}), означающий пробитый целиком участок перфоленты и сигнализирующий о том, что символ, записанный здесь ранее, был удалён, а значит, его также следует пропустить{{sfn|Mackenzie|1980|p=235}}{{sfn|Mackenzie|1980|p=225}}. |
||
#* Сами управляющие символы основной группы изначально были разделены на 4 подгруппы: управление передачей ({{0x|01}} |
#* Сами управляющие символы основной группы изначально были разделены на 4 подгруппы: управление передачей ({{0x|01}}—{{0x|07}}), форматирование ({{0x|08}}—{{0x|0F}}), управление устройством ({{0x|10}}—{{0x|17}}) и разделители потоков данных ({{0x|18}}—{{0x|1F}}){{sfn|Mackenzie|1980|p=226}}. В редакции 1967 года этот порядок был отчасти нарушен из-за переноса дополнительных управляющих символов. |
||
# Группа цифр и основных знаков препинания |
# Группа цифр и основных знаков препинания делится на две подгруппы по 16 символов, соответствующие верхнему и нижнему регистру. |
||
#* Группа начинается с пробела {{0x|20}} |
#* Группа начинается с пробела ({{0x|20}}) — было принято решение, что пробел должен считаться печатным, а не управляющим символом, но при этом располагаться в самом начале для корректной работы [[Алгоритм сортировки|алгоритмов сортировки]]{{sfn|Mackenzie|1980|p=222—224}}. |
||
#* Цифры идут во второй подгруппе |
#* Цифры идут во второй подгруппе — такое решение было принято для простоты преобразования ASCII в 4-битный [[двоично-десятичный код]] ({{lang-en2|BCD}}) и обратно, соответственно, путём отброса или добавления старших трёх битов кода цифры (011<sub>2</sub>): так, например, цифре 5 соответствует код {{0x|35}} (0110101<sub>2</sub>) в ASCII и 0101<sub>2</sub> в BCD. По этой причине цифры невозможно было разместить в первой подгруппе, поскольку в ней первым идёт пробел{{sfn|Mackenzie|1980|p=225}}{{sfn|Mackenzie|1980|p=239}}. Другая причина расположения цифр в этой подгруппе — необходимость того, чтобы при сортировке большинство знаков препинания располагалось раньше цифр и букв{{sfn|Mackenzie|1980|p=236}}. |
||
#* 9 символов после пробела |
#* 9 символов после пробела — знаки препинания (<code>!</code>, <code>"</code>, <code>#</code>, <code>$</code>, <code>%</code>, <code>&</code>, <code>'</code>, <code>(</code>, <code>)</code>), идущие в том порядке, в котором их располагали на клавиатурах [[Пишущая машина|пишущих машин]] тех лет{{sfn|Mackenzie|1980|p=240}}, за исключением скобок, которые заняли позиции {{0x|28}} и {{0x|29}}, поскольку цифра 0 оказалась под кодовой позицией пробела{{sfn|Mackenzie|1980|p=241}}. Впрочем, на некоторых электромеханических пишущих машинах, в частности [[IBM Selectric]], расположение этих знаков было иным в связи с наличием у них механизма дозирования силы удара, который требовал расположения на одной клавише знаков, близких по [[Оптическая плотность|оптической плотности]]. Окончательно отличное от кодовой таблицы ASCII положение этих знаков было закреплено в [[IBM PC]]. |
||
#* Символы точки и запятой в пишущих |
#* Символы точки и запятой в пишущих машинах тех лет дублировались в обоих регистрах. При создании ASCII было решено не дублировать их, а разместить в спаренных позициях символы <code><</code> и <code>></code>{{sfn|Mackenzie|1980|p=240—241}}. Знак вопроса также спарен со знаком косой черты как на пишущих машинах{{sfn|Mackenzie|1980|p=240}}. |
||
# Группа заглавных букв начинается с символа « |
# Группа заглавных букв начинается с символа «[[@|коммерческое „эт“]]» (@, {{0x|40}}) — предполагалось, что для машин, поставляемых во Францию и Италию, этот символ будет заменяться на букву <code>À</code>. Положение заглавных латинских букв и цифр было выбрано из соображений совместимости с [[Шестибитные кодировки|шестибитной кодировкой]] DEC SIXBIT. Три позиции после заглавных букв ({{0x|5B}}, {{0x|5C}} и {{0x|5D}}) также предполагалось при необходимости заменять на национальные символы. В редакции 1963 года в позициях {{0x|5E}} и {{0x|5F}} располагались, соответственно, символы «стрелка вверх» (↑) и «стрелка влево» (←), заменённые в редакции 1965 года на [[карет]] (^) и [[подчёркивание]] (_). |
||
# Группа строчных букв появилась в |
# Группа строчных букв появилась в редакции 1965 года и была частично пересмотрена в редакции 1967 года. Все строчные буквы расположены так же, как и соответствующие заглавные, что позволяет переключать регистр [[Отрицание (логика)|инвертированием]] 6-го бита (если первым считать самый младший бит). Позиции {{0x|60}}, {{0x|7B}}, {{0x|7C}} и {{0x|7D}} также предполагалось при необходимости заменять на национальные символы. Символ логического отрицания (¬, {{0x|7C}}), добавленный в редакции 1965 года, в редакции 1967 года был убран. |
||
Важная особенность — |
Важная особенность ASCII — он, в отличие, к примеру, от ITA2, не использует переключение регистров{{sfn|Mackenzie|1980|p=236}}. Хотя переключение регистров могло бы уменьшить число битов, требуемое для кодирования сообщения, и, следовательно, уменьшить время передачи и занимаемое место на носителях, оно также повысило бы вероятность не прочесть сообщение при его повреждении{{sfn|Mackenzie|1980|p=214—215}}. Таким образом, было решено отказаться от использования регистров и уместить все символы в 7 бит{{sfn|Mackenzie|1980|p=236}}. Тем не менее, для возможности дальнейшего расширения ASCII в набор включены символы [[#ESC|ESC]], [[#SI|SI]] и [[#SO|SO]]{{sfn|Mackenzie|1980|p=214—215}}. |
||
=== Наложение символов === |
|||
С помощью символа [[Backspace|Backspace (BS)]] (возврат на один символ) на [[принтер]]е можно печатать один символ поверх другого. В ASCII таким же способом можно добавить к буквам [[диакритические знаки]], например: |
|||
* <code>a BS '</code> → á |
|||
* <code>a BS `</code> → à |
|||
* <code>a BS ^</code> → â |
|||
* <code>o BS /</code> → ø |
|||
* <code>c BS ,</code> → ç |
|||
* <code>n BS ~</code> → ñ |
|||
'''Примечание'''. В старых [[шрифт]]ах — [[апостроф|апостроф «'»]] рисовался с наклоном влево (сравните: «<span style="font-size:xx-large">`</span>» и «<span style="font-size:xx-large">´</span>»), а [[тильда|тильда «~»]] — была сдвинута вверх (сравните: «<span style="font-size:xx-large">~</span>» и «<span style="font-size:xx-large">˜</span>»), так что они как раз подходили на роль символов [[акут|акут «´»]] и «тильда сверху». |
|||
Если в одной позиции дважды напечатать один и тот же символ — получится [[Жирный шрифт|жирный]] символ; если в одной позиции напечатать символ, а затем [[Подчёркивание|подчёркивание «_»]] — получится подчёркнутый символ: |
|||
* <code>a BS a</code> → '''a''' |
|||
* <code>a BS _</code> → <u>a</u> |
|||
Эта техника до сих пор используется, например, в справочной системе <code>[[man]]</code>. |
|||
=== Национальные варианты ASCII === |
|||
Стандарт ISO 646 (ECMA-6) предусматривает возможность размещения в ASCII национальных символов. Для этого предлагается заменять символы «[[Коммерческое at|@]]», «[[Квадратные скобки|[]]», «[[Обратная косая черта|\]]», «[[Квадратные скобки|]]]», «[[Циркумфлекс|^]]», «[[Машинописный обратный апостроф|`]]», «[[Фигурные скобки|{]]», «[[Вертикальная черта|<nowiki>|</nowiki>]]», «[[Фигурные скобки|}]]», «[[Тильда|~]]». Также на месте [[Знак решётки|знака решётки «#»]] может быть размещён [[Символ фунта|символ фунта «£»]], а на месте [[Символ доллара|символа доллара «$»]] — [[Знак валюты|знак валюты «¤»]]. Вариант ASCII, не содержащий национальных символов, называется «US-ASCII» или «international reference version». |
|||
Для некоторых [[язык]]ов (с нелатинской [[письменность]]ю: [[русский язык|русский]], [[греческий язык|греческий]], [[арабский язык|арабский]], [[иврит]] и др.) существовали более радикальные модификации ASCII: |
|||
* В одной из таких модификаций — на месте [[Строчная буква|строчных]] [[Латинский алфавит|латинских букв]] размещались национальные символы (для [[Русский алфавит|русского]] и [[Греческий алфавит|греческого]] — [[Прописная буква|заглавные]] [[Буква|буквы]]). |
|||
* В другой модификации — предусматривалось переключение между US-ASCII и национальным вариантом; переключение осуществлялось «на лету»: с помощью символов «SO» ({{lang-en|'''s'''hift '''o'''ut}}) и «SI» ({{lang-en|'''s'''hift '''i'''n}}); в этом случае — в национальном варианте можно было полностью заменить [[Латинский алфавит|латинские буквы]] на национальные символы. См. также: [[КОИ-7]]. |
|||
Впоследствии оказалось удобнее использовать [[октет (информатика)|8-битовые]] кодировки ([[кодовая страница|кодовые страницы]]), в которых нижнюю половину кодовой таблицы (0—127) занимают символы US-ASCII, а верхнюю (128—255) — дополнительные символы, включая набор национальных символов. Таким образом, [[Октеты со старшим битом 1|верхняя половина таблицы ASCII]] (до повсеместного внедрения [[Юникод]]а) активно использовалась для представления локализированных символов, букв местного языка. Отсутствие единого стандарта размещения [[Кириллица|кириллических символов]] в таблице ASCII доставляло множество проблем с кодировками ([[КОИ-8]], [[Windows-1251]] и др.). Носители других языков с нелатинской письменностью тоже страдали из-за наличия нескольких разных кодировок. |
|||
Первые 128 символов стандарта [[Юникод]] совпадают с соответствующими символами US-ASCII. |
|||
В первой версии стандарта ASCII (1963 год) — в позициях 0x5e (94) и 0x5f (95) располагались символы «стрелка вверх» и «стрелка влево», соответственно. Стандарт ECMA-6 (1965 год) заменил их на [[карет|знак вставки]]<!-- единственный вариант перевода слова «caret», даваемый Lingvo --> и символ [[Подчёркивание|подчёркивание «_»]], соответственно. |
|||
В Советском Союзе стандарт был утвержден в виде таблицы международной ссылочной версии кода КОИ-7 Н0 ГОСТ 27463-87 (СТ СЭВ 356-86) «Системы обработки информации. 7-битные кодированные наборы символов».<ref>{{Cite web|url=http://docs.cntd.ru/document/1200021930|title=ГОСТ 27463-87 (СТ СЭВ 356-86) Системы обработки информации. 7-битные кодированные наборы символов (с Изменением N 1), ГОСТ от 29 октября 1987 года №27463-87|publisher=docs.cntd.ru|accessdate=2018-04-09|archive-date=2018-04-23|archive-url=https://web.archive.org/web/20180423032023/http://docs.cntd.ru/document/1200021930|deadlink=no}}</ref> |
|||
=== Управляющие символы === |
=== Управляющие символы === |
||
{{main|Управляющие символы}} |
{{main|Управляющие символы}} |
||
Стандарт ASCII создавался не только для применения в ЭВМ, но и для обмена информацией по [[телетайп]]у. В набор были включены непечатаемые символы, используемые как команды для управления телетайпом. Аналогичные команды применялись и в других докомпьютерных средствах обмена сообщениями ([[азбука Морзе]], [[семафорная азбука]]), учитывая специфику устройства. Большинство управляющих символов ASCII вскоре утратили своё назначение и в современных компьютерных системах не используются. |
|||
* '''{{видимый якорь|NUL}}''', {{0x|00}} ({{tr-en|s=null|пустой}}). Символ '''<code>NUL</code>''' всегда игнорировался. На [[Перфолента (носитель информации)|перфолентах]] бит «1» обозначался отверстием, а бит «0» — отсутствием отверстия. Участки перфоленты, на которых не была записана информация, не содержали отверстий (то есть содержали символы '''<code>NUL</code>'''); такие участки располагались в начале и в конце ленты. Символ '''<code>NUL</code>''' по сей день используется во многих [[язык программирования|языках программирования]] (как признак [[ASCIIZ|конца строки]]) и обозначается как '''<code>\0</code>''' (термин «'''строка'''» обозначает последовательность символов). В некоторых [[Операционная система|операционных системах]] '''<code>NUL</code>''' — последний символ любого [[текстовый файл|текстового файла]]. |
|||
'''Примечание:''' далее в списке — коды символов записаны в [[Шестнадцатеричная система счисления|шестнадцатеричной системе счисления]], после названий символов. |
|||
* '''{{видимый якорь|NUL}}''', 00 — null («пустой»). Символ <code>'''null'''</code> всегда игнорировался. На [[Перфолента (носитель информации)|перфолентах]], цифра «1» обозначалась отверстием, а цифра «0» — отсутствием отверстия. Участки перфоленты, на которых не была записана информация — не содержали отверстий (то есть содержали символы <code>'''null''')</code>; такие участки располагались в начале и в конце ленты. Символ <code>'''null'''</code> по сей день используется во многих [[язык программирования|языках программирования]] (как признак [[ASCIIZ|конца строки]]) и обозначается «'''\0'''» (термин «'''строка'''» обозначает последовательность символов). В некоторых [[Операционная система|операционных системах]], <code>'''null'''</code> — последний символ любого [[текстовый файл|текстового файла]]. |
|||
Сообщения, передаваемые по каналу связи, делились на две части: |
Сообщения, передаваемые по каналу связи, делились на две части: |
||
* Заголовок; |
* Заголовок; |
||
* Текст. |
* Текст. |
||
«Заголовок» |
«Заголовок» мог содержать адреса отправителя и получателя, [[Контрольная сумма|контрольную сумму]] и т. п.; мог размещаться до «текста» или после. Термином «текст» называлась часть сообщения, предназначенная для печати. |
||
{| class="wikitable" |
{| class="wikitable" |
||
!Символ |
!Символ |
||
!Код |
!Код |
||
!Расшифровка |
!Расшифровка |
||
!Перевод |
!Перевод |
||
Строка 139: | Строка 104: | ||
|- |
|- |
||
|'''{{видимый якорь|SOH}}''' |
|'''{{видимый якорь|SOH}}''' |
||
|01 |
|{{0x|01}} |
||
|'''s'''tart '''o'''f '''h'''eading |
|'''s'''tart '''o'''f '''h'''eading |
||
|начало «заголовка» |
|начало «заголовка» |
||
|Символ начала заголовка (SOH) отмечает |
|Символ начала заголовка ('''<code>SOH</code>''') отмечает данные, не относящиеся к «тексту»: часть потока, содержащую адреса и другие служебные данные. |
||
|- |
|- |
||
|'''{{видимый якорь|STX}}''' |
|'''{{видимый якорь|STX}}''' |
||
|02 |
|{{0x|02}} |
||
|'''s'''tart of '''t'''e'''x'''t |
|'''s'''tart of '''t'''e'''x'''t |
||
|начало «текста» |
|начало «текста» |
||
|Включить печатающее устройство (телетайп). Текст для печати располагался между символами ''' |
|Включить печатающее устройство (телетайп). Текст для печати располагался между символами '''<code>STX</code>''' и '''<code>ETX</code>'''. |
||
|- |
|- |
||
|'''{{видимый якорь|ETX}}''' |
|'''{{видимый якорь|ETX}}''' |
||
|03 |
|{{0x|03}} |
||
|'''e'''nd of '''t'''e'''x'''t |
|'''e'''nd of '''t'''e'''x'''t |
||
|конец «текста» |
|конец «текста» |
||
|Выключить печатающее устройство (телетайп). В наши дни |
|Выключить печатающее устройство (телетайп). В наши дни символ '''<code>ETX</code>''' используется для отправки [[Процесс (информатика)|процессу]] [[Сигналы (UNIX)|сигнала]] [[SIGINT]] ({{tr-en|s='''sig'''nal '''int'''errupt|сигнал-прерывание}}) и может быть набран нажатием комбинации клавиш {{key|[[Ctrl]]|[[C (латиница)|C]]}}. Получив такой сигнал, процесс должен {{iw|Выход (системный вызов)|завершить работу|en|Exit (system call)}}. |
||
|- |
|- |
||
|'''{{видимый якорь|EOT}}''' |
|'''{{видимый якорь|EOT}}''' |
||
|04 |
|{{0x|04}} |
||
|'''e'''nd '''o'''f '''t'''ransmission |
|'''e'''nd '''o'''f '''t'''ransmission |
||
|конец передачи |
|конец передачи |
||
|Символ используется [[Эмулятор терминала|эмуляторами терминалов]] в значении |
|Символ используется [[Эмулятор терминала|эмуляторами терминалов]] в значении [[EOF]] ({{tr-en|s='''E'''nd '''o'''f '''F'''ile|конец файла}}) и может быть отправлен нажатием комбинации клавиш {{key|[[Ctrl]]|[[D]]}}. Получив такой сигнал, эмулятор терминала определит процесс, который в данный момент работает с терминалом, и установит в [[Стандартные потоки#Стандартный ввод|стандартном потоке ввода]] этого процесса (''stdin'': {{lang-en|'''st'''andar'''d''' '''in'''put stream}}) признак «Конец файла». В результате процесс прекратит {{iw|Чтение (системный вызов)|чтение|en|read (system call)}} ''stdin'' и начнёт обработку прочитанных данных. |
||
|- |
|- |
||
|'''{{видимый якорь|ENQ}}''' |
|'''{{видимый якорь|ENQ}}''' |
||
|05 |
|{{0x|05}} |
||
|'''enq''' |
|'''enq'''uiry |
||
|«Прошу подтверждения!» |
|«Прошу подтверждения!» |
||
| |
| |
||
|- |
|- |
||
|'''{{видимый якорь|ACK}}''' |
|'''{{видимый якорь|ACK}}''' |
||
|06 |
|{{0x|06}} |
||
|'''ack'''nowledgement |
|'''ack'''nowledgement |
||
|«Подтверждаю!» |
|«Подтверждаю!» |
||
|Символ ''' |
|Символ '''<code>NAK</code>''' означает обратное: ''«Не подтверждаю!».'' |
||
|- |
|- |
||
|'''{{видимый якорь|BEL}}''' |
|'''{{видимый якорь|BEL}}''' |
||
|07 |
|{{0x|07}} |
||
|'''bel'''l |
|'''bel'''l |
||
|''звуковой сигнал'': звонок |
|''звуковой сигнал'': звонок |
||
| |
|Используется для подачи звукового сигнала. |
||
Во многих языках программирования обозначается как '''<code>\a</code>''' (от {{lang-en|alert}}). |
|||
|- |
|- |
||
|'''{{видимый якорь|BS}}''' |
|'''{{видимый якорь|BS}}''' |
||
|08 |
|{{0x|08}} |
||
|'''b'''ack'''s'''pace |
|'''b'''ack'''s'''pace |
||
|возврат на один символ |
|возврат на один символ |
||
|Передаётся при нажатии клавиши {{key|[[BackSpace]]}}. |
|Передаётся при нажатии клавиши {{key|[[BackSpace]]}}. |
||
Во многих языках программирования обозначается как '''<code>\b</code>'''. |
|||
|- |
|- |
||
|'''{{видимый якорь| |
|'''{{видимый якорь|HT}}''' |
||
|09 |
|{{0x|09}} |
||
|''' |
|'''h'''orizontal '''t'''ab |
||
|горизонтальная [[табуляция]] |
|горизонтальная [[табуляция]] |
||
|Во многих языках программирования обозначается как '''<code>\t</code>'''. |
|||
|Обозначается как «'''\t'''». Иногда называется «'''<code>HT</code>'''» (от {{lang-en|'''h'''orizontal '''t'''abulation}}). |
|||
|- |
|- |
||
|'''{{видимый якорь|LF}}''' |
|'''{{видимый якорь|LF}}''' |
||
|0A |
|{{0x|0A}} |
||
|'''l'''ine '''f'''eed |
|'''l'''ine '''f'''eed |
||
|[[перевод строки]] |
|[[перевод строки]] |
||
|Команда для опускания каретки печатающего устройства на одну строку вниз. Обозначение конца строки различается в семействах операционных систем: |
|Команда для опускания каретки печатающего устройства на одну строку вниз. Обозначение конца строки различается в семействах операционных систем: |
||
* в [[UNIX |
* в [[UNIX]] — одиночный символ '''<code>LF</code>'''; |
||
* в |
* в классических версиях [[Mac OS]] и некоторых ОС домашних компьютеров — одиночный символ '''<code>CR</code>'''; |
||
* в [[Windows| |
* в [[Microsoft Windows|Windows]] — последовательность символов '''<code>CR LF</code>'''. |
||
Многие [[компьютерный терминал|терминалы]] 1970—1980-х годов содержали переключатель поведения клавиши {{key|Return}}, позволяющий посылать при нажатии на неё либо последовательность '''<code>CR LF</code>''', либо только '''<code>CR</code>'''. |
|||
Во многих языках программирования обозначается как '''<code>\n</code>'''. |
|||
|- |
|- |
||
|'''{{видимый якорь|VT}}''' |
|'''{{видимый якорь|VT}}''' |
||
|0B |
|{{0x|0B}} |
||
|'''v'''ertical '''t'''ab |
|'''v'''ertical '''t'''ab |
||
|вертикальная [[табуляция]] |
|вертикальная [[табуляция]] |
||
|Во многих языках программирования обозначается как '''<code>\v</code>'''. |
|||
| |
|||
|- |
|- |
||
|'''{{видимый якорь|FF}}''' |
|'''{{видимый якорь|FF}}''' |
||
|0C |
|{{0x|0C}} |
||
|'''f'''orm '''f'''eed |
|'''f'''orm '''f'''eed |
||
|«прогон страницы», новая страница |
|«прогон страницы», новая страница |
||
|Команда для [[принтер]]а: продолжить печать с начала следующего листа. |
|Команда для [[принтер]]а: продолжить печать с начала следующего листа. |
||
Во многих языках программирования обозначается как '''<code>\f</code>'''. |
|||
|- |
|- |
||
|'''{{видимый якорь|CR}}''' |
|'''{{видимый якорь|CR}}''' |
||
|0D |
|{{0x|0D}} |
||
|'''c'''arriage '''r'''eturn |
|'''c'''arriage '''r'''eturn |
||
|[[возврат каретки]] |
|[[возврат каретки]] |
||
|Команда для принтера: продолжить печать с начала текущей строки (''не'' с новой строки). |
|Команда для принтера: продолжить печать с начала текущей строки (''не'' с новой строки). В классических версиях операционной системы [[Mac OS]] символ '''<code>CR</code>''' обозначал конец строки текстового файла. С клавиатуры символ '''<code>CR</code>''' может быть введён нажатием комбинации клавиш: {{key|[[Ctrl]]|[[M (латиница)|M]]}}. |
||
Во многих языках программирования обозначается как '''<code>\r</code>'''. |
|||
|- |
|- |
||
|'''{{видимый якорь|SO}}''' |
|'''{{видимый якорь|SO}}''' |
||
|0E |
|{{0x|0E}} |
||
|'''s'''hift '''o'''ut |
|'''s'''hift '''o'''ut |
||
|«Переключиться на другую ленту (кодировку)» |
|«Переключиться на другую ленту (кодировку)» |
||
Строка 227: | Строка 198: | ||
|- |
|- |
||
|'''{{видимый якорь|SI}}''' |
|'''{{видимый якорь|SI}}''' |
||
|0F |
|{{0x|0F}} |
||
|'''s'''hift '''i'''n |
|'''s'''hift '''i'''n |
||
|«Переключиться на исходную ленту (кодировку)» |
|«Переключиться на исходную ленту (кодировку)» |
||
|Команда для выполнения действия, обратного действию |
|Команда для выполнения действия, обратного действию '''<code>SO</code>'''. |
||
|- |
|- |
||
|'''{{видимый якорь|DLE}}''' |
|'''{{видимый якорь|DLE}}''' |
||
|10 |
|{{0x|10}} |
||
|'''d'''ata '''l'''ink '''e'''scape |
|'''d'''ata '''l'''ink '''e'''scape |
||
|«Экранирование канала данных» |
|«Экранирование канала данных» |
||
|Любые символы, следующие после |
|Любые символы, следующие после '''<code>DLE</code>''', должны восприниматься как '''данные''', а не как управляющие символы. |
||
|- |
|- |
||
|'''{{видимый якорь|DC1}}''' |
|'''{{видимый якорь|DC1}}''' |
||
|11 |
|{{0x|11}} |
||
|'''d'''evice '''c'''ontrol '''1''' |
|'''d'''evice '''c'''ontrol '''1''' |
||
|Первый символ управления устройством |
|Первый символ управления устройством |
||
Строка 245: | Строка 216: | ||
|- |
|- |
||
|'''{{видимый якорь|DC2}}''' |
|'''{{видимый якорь|DC2}}''' |
||
|12 |
|{{0x|12}} |
||
|'''d'''evice '''c'''ontrol '''2''' |
|'''d'''evice '''c'''ontrol '''2''' |
||
|Второй символ управления устройством |
|Второй символ управления устройством |
||
Строка 251: | Строка 222: | ||
|- |
|- |
||
|'''{{видимый якорь|DC3}}''' |
|'''{{видимый якорь|DC3}}''' |
||
|13 |
|{{0x|13}} |
||
|'''d'''evice '''c'''ontrol '''3''' |
|'''d'''evice '''c'''ontrol '''3''' |
||
|Третий символ управления устройством |
|Третий символ управления устройством |
||
Строка 257: | Строка 228: | ||
|- |
|- |
||
|'''{{видимый якорь|DC4}}''' |
|'''{{видимый якорь|DC4}}''' |
||
|14 |
|{{0x|14}} |
||
|'''d'''evice '''c'''ontrol '''4''' |
|'''d'''evice '''c'''ontrol '''4''' |
||
|Четвёртый символ управления устройством |
|Четвёртый символ управления устройством |
||
Строка 263: | Строка 234: | ||
|- |
|- |
||
|'''{{видимый якорь|NAK}}''' |
|'''{{видимый якорь|NAK}}''' |
||
|15 |
|{{0x|15}} |
||
|'''n'''egative '''a'''c'''k''' |
|'''n'''egative '''a'''c'''k'''nowledgement |
||
|«Не подтверждаю!» |
|«Не подтверждаю!» |
||
|Обратно символу |
|Обратно символу '''<code>ACK</code>'''. |
||
|- |
|- |
||
|'''{{видимый якорь|SYN}}''' |
|'''{{видимый якорь|SYN}}''' |
||
|16 |
|{{0x|16}} |
||
|'''syn''' |
|'''syn'''chronous idle |
||
|синхронное ожидание |
|||
| |
|||
|Этот символ передавался, когда (для синхронизации) было необходимо что-нибудь передать. |
|Этот символ передавался, когда (для синхронизации) было необходимо что-нибудь передать. |
||
|- |
|- |
||
|'''{{видимый якорь|ETB}}''' |
|'''{{видимый якорь|ETB}}''' |
||
|17 |
|{{0x|17}} |
||
|'''e'''nd of '''t''' |
|'''e'''nd of '''t'''ransmission '''b'''lock |
||
|конец |
|конец блока передаваемых данных |
||
|Иногда |
|Иногда данные (по техническим причинам) разбивались на блоки. |
||
|- |
|- |
||
|'''{{видимый якорь|CAN}}''' |
|'''{{видимый якорь|CAN}}''' |
||
|18 |
|{{0x|18}} |
||
|'''can'''cel |
|'''can'''cel |
||
|«Отмена» |
|«Отмена» |
||
Строка 287: | Строка 258: | ||
|- |
|- |
||
|'''{{видимый якорь|EM}}''' |
|'''{{видимый якорь|EM}}''' |
||
|19 |
|{{0x|19}} |
||
|'''e'''nd of '''m'''edium |
|'''e'''nd of '''m'''edium |
||
|«Конец носителя» |
|«Конец носителя» |
||
|Кончилась перфолента, |
|Кончилась бумага, перфолента, магнитная лента и т. п. |
||
|- |
|- |
||
|'''{{видимый якорь|SUB}}''' |
|'''{{видимый якорь|SUB}}''' |
||
|1A |
|{{0x|1A}} |
||
|'''sub'''stitute |
|'''sub'''stitute |
||
|«Подставить» |
|«Подставить» |
||
|Символ ставится: |
|Символ ставится: |
||
* На месте символа, значение которого было потеряно (или испорчено) при передаче; |
* На месте символа, значение которого было потеряно (или испорчено) при передаче; |
||
* Перед символом, для интерпретации которого нужно переключиться на дополнительный набор символов; |
* Перед символом, для интерпретации которого нужно переключиться на дополнительный набор символов; |
||
* Перед символом, печатать который нужно другим цветом |
* Перед символом, печатать который нужно другим цветом; |
||
* И т. п. |
|||
В настоящее время символ вставляется нажатием комбинации клавиш {{key|[[Ctrl]]|[[Z (латиница)|Z]]}} и используется для обозначения конца файла в [[Операционная система|операционных системах]] [[DOS|«DOS»]] и [[Microsoft Windows|«Windows»]]. |
|||
В настоящее время символ вставляется нажатием комбинации клавиш {{key|[[Ctrl]]|[[Z (латиница)|Z]]}} и используется для обозначения конца файла в операционных системах [[DOS]] и [[Microsoft Windows|Windows]]. |
|||
|- |
|- |
||
|'''{{видимый якорь|ESC}}''' |
|'''{{видимый якорь|ESC}}''' |
||
|1B |
|{{0x|1B}} |
||
|'''esc'''ape |
|'''esc'''ape |
||
|экранирование |
|||
| |
|||
| |
|Признак того, что символ, следующий после '''<code>ESC</code>''', имеет какое-то другое (отличное от определённого в ASCII) значение. Обычно после символа '''<code>ESC</code>''' следуют [[Управляющие последовательности ANSI|управляющие последовательности]]; в операционной системе [[DOS]] они реализуются драйвером [[ANSI.SYS]]. |
||
|- |
|- |
||
|'''{{видимый якорь|DEL}}''' |
|'''{{видимый якорь|DEL}}''' |
||
|7F |
|{{0x|7F}} |
||
|'''del'''ete |
|'''del'''ete |
||
|стереть последний символ |
|«Забой», стереть последний символ |
||
|Символом |
|Символом '''<code>DEL</code>''' (состоящим в двоичном коде из всех единиц) можно было «забить» любой символ. Устройства и программы игнорировали '''<code>DEL</code>''' так же, как и '''<code>NUL</code>'''. |
||
Код этого символа происходит из первых [[Текстовый редактор|текстовых процессоров]] с памятью на [[Перфолента (носитель информации)|перфоленте]]: в них удаление символа происходило «забиванием» его кода |
Код этого символа происходит из первых [[Текстовый редактор|текстовых процессоров]] с памятью на [[Перфолента (носитель информации)|перфоленте]]: в них удаление символа происходило «забиванием» его кода отверстиями (обозначавшими [[двоичная логика|логические единицы]]). |
||
|} |
|} |
||
Поддерживалось разделение данных на 4 уровня: |
Поддерживалось разделение данных на 4 уровня: |
||
Строка 325: | Строка 297: | ||
|- |
|- |
||
|'''{{видимый якорь|FS}}''' |
|'''{{видимый якорь|FS}}''' |
||
|1C |
|{{0x|1C}} |
||
|'''f'''ile '''s'''eparator |
|'''f'''ile '''s'''eparator |
||
|разделитель файлов |
|разделитель файлов |
||
Строка 331: | Строка 303: | ||
|- |
|- |
||
|'''{{видимый якорь|GS}}''' |
|'''{{видимый якорь|GS}}''' |
||
|1D |
|{{0x|1D}} |
||
|'''g'''roup '''s'''eparator |
|'''g'''roup '''s'''eparator |
||
|разделитель групп |
|разделитель групп |
||
Строка 337: | Строка 309: | ||
|- |
|- |
||
|'''{{видимый якорь|RS}}''' |
|'''{{видимый якорь|RS}}''' |
||
|1E |
|{{0x|1E}} |
||
|'''r'''ecord '''s'''eparator |
|'''r'''ecord '''s'''eparator |
||
|разделитель записей |
|разделитель записей |
||
Строка 343: | Строка 315: | ||
|- |
|- |
||
|'''{{видимый якорь|US}}''' |
|'''{{видимый якорь|US}}''' |
||
|1F |
|{{0x|1F}} |
||
|'''u'''nit '''s'''eparator |
|'''u'''nit '''s'''eparator |
||
|разделитель |
|разделитель полей |
||
|записи могли состоять из |
|записи могли состоять из полей |
||
|} |
|} |
||
== Наложение символов == |
|||
С помощью символа [[#BS|BS]] (возврат на один символ) на [[принтер]]е можно напечатать один символ поверх другого. В ASCII таким же способом можно добавить к буквам [[диакритические знаки]], например: |
|||
* <code>a BS '</code> → á{{efn|В старых [[шрифт]]ах [[апостроф]] (') рисовался с наклоном влево, а [[тильда]] (~) была сдвинута вверх, поэтому они могли использоваться в качестве символов «[[акут]]» (´) и «тильда сверху» (˜).|name=old_style_glyphs}} |
|||
* <code>a BS `</code> → à |
|||
* <code>a BS ^</code> → â |
|||
* <code>o BS /</code> → ø |
|||
* <code>c BS ,</code> → ç |
|||
* <code>n BS ~</code> → ñ{{efn|name=old_style_glyphs}} |
|||
Если в одной позиции дважды напечатать один и тот же символ, получится [[Жирный шрифт|жирный]] символ; если в одной позиции напечатать символ и [[подчёркивание]] (_), получится подчёркнутый символ: |
|||
* <code>a BS a</code> → '''a''' |
|||
* <code>a BS _</code> → <u>a</u> |
|||
Эта техника до сих пор используется, например, в справочной системе [[man]]. |
|||
== Представление ASCII в ЭВМ == |
== Представление ASCII в ЭВМ == |
||
На подавляющем большинстве современных компьютеров |
На подавляющем большинстве современных компьютеров минимально адресуемой единицей памяти является 8-битный [[байт]] ([[Октет (информатика)|октет]]), поэтому там используются 8-битные, а не 7-битные символы. Обычно символ ASCII дополняют до 8 бит, просто добавляя один нулевой бит в качестве [[Старший бит|старшего бита]] октета. |
||
===USASCII-8=== |
|||
=== USASCII-8 === |
|||
На компьютерах [[IBM System/360|IBM/360]] применялся другой метод: 6-й бит (если первым считать самый младший бит) перемещается в 7-й, а бывший 7-й «раздваивается» и копируется и в 8-й бит, и в 6-й<ref>Amdahl G. M., Blaauw G. A., Brooks F. P., Jr. «Architecture of the IBM system/360». 1964</ref>. Такую кодировку называли USASCII-8{{sfn|Mackenzie|1980|p=399-400}} |
|||
На компьютерах [[IBM System/360|IBM/360]] применялся другой метод: 6-й бит (если первым считать самый младший бит) перемещается в 7-й, а бывший 7-й «раздваивается» и копируется и в 8-й бит, и в 6-й<ref>Amdahl G. M., Blaauw G. A., Brooks F. P., Jr. «Architecture of the IBM system/360». 1964</ref>. Такую кодировку называли USASCII-8{{sfn|Mackenzie|1980|p=399—400}}. |
|||
{| class="wikitable" style="text-align: center; font-family: monospace" |
{| class="wikitable" style="text-align: center; font-family: monospace" |
||
Строка 462: | Строка 452: | ||
| || || ESC || DEL |
| || || ESC || DEL |
||
|} |
|} |
||
На компьютерах с минимально адресуемой единицей памяти в 36 бит |
На компьютерах с минимально адресуемой единицей памяти в 36 бит поначалу использовали [[шестибитная кодировка|6-битные символы]] (1 слово = 6 символов). После перехода на ASCII на таких компьютерах в одном слове стали размещать либо 5 семибитных символов (1 бит оставался лишним), либо 4 девятибитных символа. |
||
== Ввод с клавиатуры == |
== Ввод с клавиатуры == |
||
Расположение символов ASCII на клавиатуре согласно ANSI X4.14-1971: символы верхнего регистра вводятся в сочетании с клавишей {{клавиша|Shift}}, а управляющие символы |
Расположение символов ASCII на [[Клавиатура|клавиатуре]] согласно ANSI X4.14-1971: символы верхнего регистра вводятся в сочетании с клавишей {{клавиша|Shift}}, а управляющие символы — с {{клавиша|Ctrl}}<ref>ANSI X4.14-1971: Alphanumeric Keyboard Arrangements Accommodating the Character Sets of ASCII and ASCSOCR{{ref-en}}</ref>. |
||
{{клавиатура компьютера |
{{клавиатура компьютера |
||
|раскладка=S0.5;1;1;1;1;1;1;1;1;1;1;1;1;1;1 |
|раскладка=S0.5;1;1;1;1;1;1;1;1;1;1;1;1;1;1 |
||
Строка 479: | Строка 469: | ||
["␠"] |
["␠"] |
||
]}} |
]}} |
||
Коды ASCII используются в программировании как промежуточные кроссплатформенные коды нажатых клавиш (в противовес [[скан-код]]ам IBM PC и прочим внутренним кодам). |
Коды ASCII используются в программировании как промежуточные кроссплатформенные коды нажатых клавиш (в противовес [[скан-код]]ам IBM PC и прочим внутренним кодам). Ниже приведена таблица соответствия кодов клавишам для [[Раскладка клавиатуры|раскладки клавиатуры]] [[QWERTY]]<ref>{{cite web|title=Keys Enum|url=https://docs.microsoft.com/en-us/dotnet/ruwiki/api/system.windows.forms.keys|website=Microsoft.com|access-date=2022-06-11|archive-date=2022-06-11|archive-url=https://web.archive.org/web/20220611114614/https://docs.microsoft.com/en-us/dotnet/ruwiki/api/system.windows.forms.keys?view=windowsdesktop-6.0|deadlink=no}}</ref>. |
||
{{Клавиатура компьютера |
{{Клавиатура компьютера|обозначения=[ |
||
["27","112","113","114","115","116","117","118","119","120","121","122","123","44","145","19","189"], |
["27","112","113","114","115","116","117","118","119","120","121","122","123","44","145","19","189"], |
||
["192","49","50","51","52","53","54","55","56","57","48","189","187","8","45","36","33","144","111","106","109"], |
["192","49","50","51","52","53","54","55","56","57","48","189","187","8","45","36","33","144","111","106","109"], |
||
Строка 488: | Строка 478: | ||
["17","91","18","32","18","92","93","17","37","40","39","96","110"] |
["17","91","18","32","18","92","93","17","37","40","39","96","110"] |
||
]}} |
]}} |
||
== Национальные варианты и расширения == |
|||
=== 7-битные коды === |
|||
{{якорь|ISO 646}} <!-- Якорь для перенаправления со страницы ISO 646 --> |
|||
Возможность адаптации ASCII под нужды других стран предусмотрена сразу в трёх тесно взаимосвязанных стандартах — ISO 646 [[Международная организация по стандартизации|Международной организации по стандартизации]] (ныне — ISO/IEC 646), ECMA-6 [[European Computer Manufacturers Association|Европейской ассоциации производителей компьютеров]] и рекомендации V.3 (Международный алфавит № 5) [[Международный консультативный комитет по телеграфии и телефонии|Международного консультативного комитета по телеграфии и телефонии]] (ныне — рекомендация {{iw|T.50||en|T.50 (standard)}} (Международный справочный алфавит) [[Сектор стандартизации электросвязи МСЭ|Сектора стандартизации электросвязи МСЭ]]). Для этого предлагается заменять символы [[Коммерческое at|<code>@</code>]], [[Квадратные скобки|<code>[</code>]], [[Обратная косая черта|<code>\</code>]], [[Квадратные скобки|<code>]</code>]], [[Карет|<code>^</code>]], [[Машинописный обратный апостроф|<code>`</code>]], [[Фигурные скобки|<code>{</code>]], [[Вертикальная черта|<code>|</code>]], [[Фигурные скобки|<code>}</code>]] и [[Тильда|<code>~</code>]] на национальные. Также допускается замена [[Знак решётки|знака решётки]] (<code>#</code>) на [[знак фунта]] (<code>£</code>), а [[Знак доллара|знака доллара]] (<code>$</code>) — на [[знак валюты]] (<code>¤</code>). Унифицированный вариант кода, не содержащий национальные символы, при этом обозначается как IRV (от {{lang-en|'''I'''nternational '''R'''eference '''V'''ersion}} — «международная ссылочная версия»){{efn|Действующие редакции международных ссылочных версий всех трёх упомянутых стандартов полностью совпадают с ASCII.}}. ISO 646 IRV был утверждён в [[Союз Советских Социалистических Республик|Советском Союзе]] как [[КОИ-7]] Н0 в ГОСТ 27463 (СТ СЭВ 356). |
|||
Для некоторых [[язык]]ов с нелатинской [[письменность]]ю ([[Русский язык|русского]], [[Греческий язык|греческого]], [[Арабский язык|арабского]], [[иврит]]а и др.) существовали и более радикальные модификации ASCII: |
|||
* в одних на месте [[Строчная буква|строчных]] [[Латинский алфавит|латинских букв]] размещались национальные символы (для [[Русский алфавит|русского]] и [[Греческий алфавит|греческого]] вариантов — [[Прописная буква|заглавные буквы]] (как, например, в КОИ-7 Н2)); |
|||
* в других предусматривалось переключение между ASCII и национальным вариантом кода «на лету» с помощью символов [[#SO|SO]] и [[#SI|SI]]; в этом случае в национальном варианте можно было полностью заменить латинские буквы на национальные символы (как, например, в КОИ-7 Н1). |
|||
=== 8-битные коды === |
|||
Со временем стали появляться производные 8-битные кодировки ([[Кодовая страница|кодовые страницы]]), содержащие 2<sup>8</sup> = 256 кодовых позиций, в которых нижняя половина кодовой таблицы (позиции {{0x|00}}—{{0x|7F}}) совпадает с ASCII, а верхняя (позиции {{0x|80}}—{{0x|FF}}) служит для размещения дополнительных, в том числе национальных, символов. Подобные ASCII-совместимые кодировки, получившие неофициальное собирательное название «{{iw|Расширенный ASCII||en|Extended ASCII}}», оказались удобнее упомянутых ранее 7-битных вариантов и широко использовались вплоть до начала повсеместного внедрения [[Юникод]]а. Впрочем, отсутствие единого подхода к размещению национальных символов в их кодовых таблицах (например, [[Кириллица|кириллицы]] в [[КОИ-8]], [[Windows-1251]], [[ISO 8859-5]] и т. д.) порождало множество проблем. Так, например, когда [[Почтовая программа|почтовые клиенты]] отправителя и получателя [[Электронное письмо|электронного письма]] использовали различные кодировки для его интерпретации, текст письма (за исключением символов ASCII) становился нечитаемым. |
|||
=== Юникод === |
|||
{{main|Юникод}} |
|||
Символы ASCII включены в Юникод под теми же самыми кодами ({{0x|00}}—{{0x|7F}}), благодаря чему [[UTF-8]] полностью [[Обратная совместимость|обратно совместим]] с 8-битным представлением ASCII. Таким образом, Юникод можно рассматривать как одно из расширений ASCII. |
|||
== См. также == |
== См. также == |
||
{{кол}} |
|||
* [[Переносимый набор символов]] |
* [[Переносимый набор символов]] |
||
* [[Управляющие символы]] |
|||
* [[EBCDIC]] |
|||
* [[YUSCII]] |
* [[YUSCII]] |
||
* [[ |
* [[ASCII-графика]] |
||
* [[ASCII-графика|ASCII art]] |
|||
* [[КОИ-8]] |
|||
{{кол|конец}} |
|||
== Примечания == |
== Примечания == |
||
=== Комментарии === |
|||
{{комментарии}} |
|||
=== Источники === |
|||
{{примечания}} |
{{примечания}} |
||
==Литература == |
== Литература == |
||
* |
* American Standard Code for Information Interchange, ASA X3.4-1963 |
||
* |
* USA Standard Code for Information Interchange, USAS X3.4-1967 |
||
* |
* USA Standard Code for Information Interchange, USAS X3.4-1968 |
||
* |
* American National Standard Code for Information Interchange, ANSI X3.4-1977 |
||
* 7-Bit American National Standard Code for Information Interchange (7-Bit ASCII), ANSI X3.4-1986 |
|||
== Ссылки == |
== Ссылки == |
||
* {{книга|автор=Charles E. Mackenzie|заглавие=Coded Character Sets, History and Development|ссылка=https://archive.org/details/codedcharacterse00unse|издательство=Addison-Wesley Publishing Company, inc|год=1980|isbn=0-201-14460-3|язык=en|ref=Mackenzie}} |
* {{книга|автор=Charles E. Mackenzie|заглавие=Coded Character Sets, History and Development|ссылка=https://archive.org/details/codedcharacterse00unse|издательство=Addison-Wesley Publishing Company, inc|год=1980|isbn=0-201-14460-3|язык=en|ref=Mackenzie}} |
Текущая версия от 19:14, 19 ноября 2024
ASCII | |
---|---|
Орган стандартизации | Национальный институт стандартов США |
Медиафайлы на Викискладе |
ASCII (англ. American Standard Code for Information Interchange, [ˈæs.ki][1]) — стандарт кодирования букв латинского алфавита, цифр, некоторых специальных знаков и управляющих символов, принятый в 1963 году Американской ассоциацией стандартов как основной способ представления текстовых данных в ЭВМ[2].
Во избежание путаницы с национальными вариантами ASCII, используемыми в других странах, IANA рекомендует обозначать оригинальный вариант кода как US-ASCII[3].
Описание
[править | править код]Стандарт ASCII представляет собой 7-битный код без рекомендаций относительно контроля чётности, содержащий 27 = 128 кодовых позиций[4], в которых размещены следующие символы:
- десятичные цифры;
- латинские буквы;
- знаки препинания;
- орфографические знаки;
- математические символы;
- управляющие символы.
История
[править | править код]С развитием вычислительной техники и языков программирования возможностей телетайпного кода ITA2 стало не хватать, что вынуждало производителей ЭВМ создавать расширения для ITA2 или же свои собственные коды. Кроме того, для записи на перфокарты использовались различные варианты кода Холлерита[англ.]. Таким образом, к началу 1960-х годов существовало достаточно большое количество кодировок латиницы, используемых как для передачи по линиям связи, так и для записи на носители — магнитную ленту, перфоленту и перфокарты, — таких как ITA2, FIELDATA[англ.], различные варианты BCDIC и т. д.[5], причём даже в рамках одной и той же кодировки один код мог соответствовать различным символам в зависимости от модели и назначения устройства. Чтобы решить эту проблему, 4 августа 1960 года был создан комитет X3.2 (как часть комитета X3, сформированного 13 января того же года)[6], в который вошли представители компаний IBM (в частности, Роберт Бемер[англ.]), AT&T, Bell Labs и других.
Работа по созданию ASCII началась 6 октября 1960 года[6], и 17 июня 1963 года, почти 3 года спустя, была опубликована его первая редакция (ASA X3.4-1963)[7]. В ней отсутствовали строчные буквы, а область из 28 кодовых позиций 0x60
—0x7B
была зарезервирована для дальнейшего использования[8][9]. Велись споры о том, использовать эту область для добавления строчных букв или же управляющих символов.
В 1965 году была подготовлена новая редакция ASCII (ASA X3.4-1965), которая, однако, так и не была опубликована и не использовалась нигде, кроме терминалов IBM 2260/2848 и принтеров IBM 1053 (да и то без строчных букв и некоторых других символов)[10]. Следующая редакция ASCII (USAS X3.4-1967) была опубликована 5 июля 1967 года и определила окончательную кодовую таблицу[11]. Новые редакции ASCII продолжили выходить и далее (USAS X3.4-1968, ANSI X3.4-1977, ANSI X3.4-1986 и т. д.), однако кодовую таблицу изменения в них более не затрагивали.
В целом, внедрение ASCII долгое время саботировалось компанией IBM, отдававшей предпочтение собственной кодировке EBCDIC, являющейся дальнейшим развитием кодировки BCDIC, также созданной IBM и основанной, в свою очередь, на коде Холлерита[7].
Структурные свойства таблицы
[править | править код]Первая редакция ASCII содержала 36 управляющих символов, пробел, 10 арабских цифр, 26 заглавных латинских букв и 27 специальных символов, подразделяемых на группы[12]:
- 8 знаков препинания (
.
,,
,:
,;
,!
,?
,'
,"
); - 5 знаков для финансовых и биржевых операций (
#
,$
,%
,&
,@
); - 2 пары скобок (
(
,)
,[
,]
); - 8 математических символов (
+
,-
,*
,/
,\
,=
,<
,>
)[a]; - 2 стрелки для блок-схем (
↑
,←
).
Cимвол «подушка» (⌑
), имевшийся в наборе доступных символов многих печатающих устройств того времени и присутствовавший в кодировках BCDIC, FIELDATA и др., ни в одну из редакций ASCII не вошёл.
В редакции 1967 года был пересмотрен (сокращён до 33) набор управляющих символов и убраны стрелки, а также добавлены строчные буквы и 7 дополнительных символов (^
, _
, `
, {
, |
, }
, ~
), после чего кодовая таблица приняла окончательный вид[13]:
.0 | .1 | .2 | .3 | .4 | .5 | .6 | .7 | .8 | .9 | .A | .B | .C | .D | .E | .F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0. | NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL | BS | HT | LF | VT | FF | CR | SO | SI |
1. | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN | EM | SUB | ESC | FS | GS | RS | US |
2. | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / | |
3. | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
4. | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
5. | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ |
6. | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
7. | p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ | DEL |
Все символы в ASCII делятся на 4 группы по 32 символа[14]:
- Управляющие символы предназначены для управления передачей и выводом текста на терминал[15]. Группа начинается с символа NUL (
0x00
), означающего незаписанный участок, например, перфоленты, и игнорируемого при выводе на экран или на печать[16]. За пределами группы, в конце таблицы также располагается символ DEL (0x7F
), означающий пробитый целиком участок перфоленты и сигнализирующий о том, что символ, записанный здесь ранее, был удалён, а значит, его также следует пропустить[16][17].- Сами управляющие символы основной группы изначально были разделены на 4 подгруппы: управление передачей (
0x01
—0x07
), форматирование (0x08
—0x0F
), управление устройством (0x10
—0x17
) и разделители потоков данных (0x18
—0x1F
)[18]. В редакции 1967 года этот порядок был отчасти нарушен из-за переноса дополнительных управляющих символов.
- Сами управляющие символы основной группы изначально были разделены на 4 подгруппы: управление передачей (
- Группа цифр и основных знаков препинания делится на две подгруппы по 16 символов, соответствующие верхнему и нижнему регистру.
- Группа начинается с пробела (
0x20
) — было принято решение, что пробел должен считаться печатным, а не управляющим символом, но при этом располагаться в самом начале для корректной работы алгоритмов сортировки[19]. - Цифры идут во второй подгруппе — такое решение было принято для простоты преобразования ASCII в 4-битный двоично-десятичный код (BCD) и обратно, соответственно, путём отброса или добавления старших трёх битов кода цифры (0112): так, например, цифре 5 соответствует код
0x35
(01101012) в ASCII и 01012 в BCD. По этой причине цифры невозможно было разместить в первой подгруппе, поскольку в ней первым идёт пробел[17][20]. Другая причина расположения цифр в этой подгруппе — необходимость того, чтобы при сортировке большинство знаков препинания располагалось раньше цифр и букв[21]. - 9 символов после пробела — знаки препинания (
!
,"
,#
,$
,%
,&
,'
,(
,)
), идущие в том порядке, в котором их располагали на клавиатурах пишущих машин тех лет[12], за исключением скобок, которые заняли позиции0x28
и0x29
, поскольку цифра 0 оказалась под кодовой позицией пробела[22]. Впрочем, на некоторых электромеханических пишущих машинах, в частности IBM Selectric, расположение этих знаков было иным в связи с наличием у них механизма дозирования силы удара, который требовал расположения на одной клавише знаков, близких по оптической плотности. Окончательно отличное от кодовой таблицы ASCII положение этих знаков было закреплено в IBM PC. - Символы точки и запятой в пишущих машинах тех лет дублировались в обоих регистрах. При создании ASCII было решено не дублировать их, а разместить в спаренных позициях символы
<
и>
[23]. Знак вопроса также спарен со знаком косой черты как на пишущих машинах[12].
- Группа начинается с пробела (
- Группа заглавных букв начинается с символа «коммерческое „эт“» (@,
0x40
) — предполагалось, что для машин, поставляемых во Францию и Италию, этот символ будет заменяться на буквуÀ
. Положение заглавных латинских букв и цифр было выбрано из соображений совместимости с шестибитной кодировкой DEC SIXBIT. Три позиции после заглавных букв (0x5B
,0x5C
и0x5D
) также предполагалось при необходимости заменять на национальные символы. В редакции 1963 года в позициях0x5E
и0x5F
располагались, соответственно, символы «стрелка вверх» (↑) и «стрелка влево» (←), заменённые в редакции 1965 года на карет (^) и подчёркивание (_). - Группа строчных букв появилась в редакции 1965 года и была частично пересмотрена в редакции 1967 года. Все строчные буквы расположены так же, как и соответствующие заглавные, что позволяет переключать регистр инвертированием 6-го бита (если первым считать самый младший бит). Позиции
0x60
,0x7B
,0x7C
и0x7D
также предполагалось при необходимости заменять на национальные символы. Символ логического отрицания (¬,0x7C
), добавленный в редакции 1965 года, в редакции 1967 года был убран.
Важная особенность ASCII — он, в отличие, к примеру, от ITA2, не использует переключение регистров[21]. Хотя переключение регистров могло бы уменьшить число битов, требуемое для кодирования сообщения, и, следовательно, уменьшить время передачи и занимаемое место на носителях, оно также повысило бы вероятность не прочесть сообщение при его повреждении[24]. Таким образом, было решено отказаться от использования регистров и уместить все символы в 7 бит[21]. Тем не менее, для возможности дальнейшего расширения ASCII в набор включены символы ESC, SI и SO[24].
Управляющие символы
[править | править код]Стандарт ASCII создавался не только для применения в ЭВМ, но и для обмена информацией по телетайпу. В набор были включены непечатаемые символы, используемые как команды для управления телетайпом. Аналогичные команды применялись и в других докомпьютерных средствах обмена сообщениями (азбука Морзе, семафорная азбука), учитывая специфику устройства. Большинство управляющих символов ASCII вскоре утратили своё назначение и в современных компьютерных системах не используются.
- NUL,
0x00
(null с англ. — «пустой»). СимволNUL
всегда игнорировался. На перфолентах бит «1» обозначался отверстием, а бит «0» — отсутствием отверстия. Участки перфоленты, на которых не была записана информация, не содержали отверстий (то есть содержали символыNUL
); такие участки располагались в начале и в конце ленты. СимволNUL
по сей день используется во многих языках программирования (как признак конца строки) и обозначается как\0
(термин «строка» обозначает последовательность символов). В некоторых операционных системахNUL
— последний символ любого текстового файла.
Сообщения, передаваемые по каналу связи, делились на две части:
- Заголовок;
- Текст.
«Заголовок» мог содержать адреса отправителя и получателя, контрольную сумму и т. п.; мог размещаться до «текста» или после. Термином «текст» называлась часть сообщения, предназначенная для печати.
Символ | Код | Расшифровка | Перевод | Описание |
---|---|---|---|---|
SOH | 0x01
|
start of heading | начало «заголовка» | Символ начала заголовка (SOH ) отмечает данные, не относящиеся к «тексту»: часть потока, содержащую адреса и другие служебные данные.
|
STX | 0x02
|
start of text | начало «текста» | Включить печатающее устройство (телетайп). Текст для печати располагался между символами STX и ETX .
|
ETX | 0x03
|
end of text | конец «текста» | Выключить печатающее устройство (телетайп). В наши дни символ ETX используется для отправки процессу сигнала SIGINT (signal interrupt с англ. — «сигнал-прерывание») и может быть набран нажатием комбинации клавиш Ctrl+C. Получив такой сигнал, процесс должен завершить работу[англ.].
|
EOT | 0x04
|
end of transmission | конец передачи | Символ используется эмуляторами терминалов в значении EOF (End of File с англ. — «конец файла») и может быть отправлен нажатием комбинации клавиш Ctrl+D. Получив такой сигнал, эмулятор терминала определит процесс, который в данный момент работает с терминалом, и установит в стандартном потоке ввода этого процесса (stdin: англ. standard input stream) признак «Конец файла». В результате процесс прекратит чтение[англ.] stdin и начнёт обработку прочитанных данных. |
ENQ | 0x05
|
enquiry | «Прошу подтверждения!» | |
ACK | 0x06
|
acknowledgement | «Подтверждаю!» | Символ NAK означает обратное: «Не подтверждаю!».
|
BEL | 0x07
|
bell | звуковой сигнал: звонок | Используется для подачи звукового сигнала.
Во многих языках программирования обозначается как |
BS | 0x08
|
backspace | возврат на один символ | Передаётся при нажатии клавиши ← Backspace.
Во многих языках программирования обозначается как |
HT | 0x09
|
horizontal tab | горизонтальная табуляция | Во многих языках программирования обозначается как \t .
|
LF | 0x0A
|
line feed | перевод строки | Команда для опускания каретки печатающего устройства на одну строку вниз. Обозначение конца строки различается в семействах операционных систем:
Многие терминалы 1970—1980-х годов содержали переключатель поведения клавиши ↵ Return, позволяющий посылать при нажатии на неё либо последовательность Во многих языках программирования обозначается как |
VT | 0x0B
|
vertical tab | вертикальная табуляция | Во многих языках программирования обозначается как \v .
|
FF | 0x0C
|
form feed | «прогон страницы», новая страница | Команда для принтера: продолжить печать с начала следующего листа.
Во многих языках программирования обозначается как |
CR | 0x0D
|
carriage return | возврат каретки | Команда для принтера: продолжить печать с начала текущей строки (не с новой строки). В классических версиях операционной системы Mac OS символ CR обозначал конец строки текстового файла. С клавиатуры символ CR может быть введён нажатием комбинации клавиш: Ctrl+M.
Во многих языках программирования обозначается как |
SO | 0x0E
|
shift out | «Переключиться на другую ленту (кодировку)» | Другая лента обычно была окрашена в красный цвет. В дальнейшем символ использовался для переключения на национальную кодировку. |
SI | 0x0F
|
shift in | «Переключиться на исходную ленту (кодировку)» | Команда для выполнения действия, обратного действию SO .
|
DLE | 0x10
|
data link escape | «Экранирование канала данных» | Любые символы, следующие после DLE , должны восприниматься как данные, а не как управляющие символы.
|
DC1 | 0x11
|
device control 1 | Первый символ управления устройством | Команда включить устройство чтения перфоленты. |
DC2 | 0x12
|
device control 2 | Второй символ управления устройством | Команда включить перфоратор. |
DC3 | 0x13
|
device control 3 | Третий символ управления устройством | Команда выключить устройство чтения перфоленты. |
DC4 | 0x14
|
device control 4 | Четвёртый символ управления устройством | Команда выключить перфоратор. |
NAK | 0x15
|
negative acknowledgement | «Не подтверждаю!» | Обратно символу ACK .
|
SYN | 0x16
|
synchronous idle | синхронное ожидание | Этот символ передавался, когда (для синхронизации) было необходимо что-нибудь передать. |
ETB | 0x17
|
end of transmission block | конец блока передаваемых данных | Иногда данные (по техническим причинам) разбивались на блоки. |
CAN | 0x18
|
cancel | «Отмена» | Отмена того, что было передано ранее. |
EM | 0x19
|
end of medium | «Конец носителя» | Кончилась бумага, перфолента, магнитная лента и т. п. |
SUB | 0x1A
|
substitute | «Подставить» | Символ ставится:
В настоящее время символ вставляется нажатием комбинации клавиш Ctrl+Z и используется для обозначения конца файла в операционных системах DOS и Windows. |
ESC | 0x1B
|
escape | экранирование | Признак того, что символ, следующий после ESC , имеет какое-то другое (отличное от определённого в ASCII) значение. Обычно после символа ESC следуют управляющие последовательности; в операционной системе DOS они реализуются драйвером ANSI.SYS.
|
DEL | 0x7F
|
delete | «Забой», стереть последний символ | Символом DEL (состоящим в двоичном коде из всех единиц) можно было «забить» любой символ. Устройства и программы игнорировали DEL так же, как и NUL .
Код этого символа происходит из первых текстовых процессоров с памятью на перфоленте: в них удаление символа происходило «забиванием» его кода отверстиями (обозначавшими логические единицы). |
Поддерживалось разделение данных на 4 уровня:
Символ | Код | Расшифровка | Перевод | Описание |
---|---|---|---|---|
FS | 0x1C
|
file separator | разделитель файлов | сообщение могло состоять из файлов |
GS | 0x1D
|
group separator | разделитель групп | файлы могли состоять из групп |
RS | 0x1E
|
record separator | разделитель записей | группы могли состоять из записей |
US | 0x1F
|
unit separator | разделитель полей | записи могли состоять из полей |
Наложение символов
[править | править код]С помощью символа BS (возврат на один символ) на принтере можно напечатать один символ поверх другого. В ASCII таким же способом можно добавить к буквам диакритические знаки, например:
Если в одной позиции дважды напечатать один и тот же символ, получится жирный символ; если в одной позиции напечатать символ и подчёркивание (_), получится подчёркнутый символ:
a BS a
→ aa BS _
→ a
Эта техника до сих пор используется, например, в справочной системе man.
Представление ASCII в ЭВМ
[править | править код]На подавляющем большинстве современных компьютеров минимально адресуемой единицей памяти является 8-битный байт (октет), поэтому там используются 8-битные, а не 7-битные символы. Обычно символ ASCII дополняют до 8 бит, просто добавляя один нулевой бит в качестве старшего бита октета.
USASCII-8
[править | править код]На компьютерах IBM/360 применялся другой метод: 6-й бит (если первым считать самый младший бит) перемещается в 7-й, а бывший 7-й «раздваивается» и копируется и в 8-й бит, и в 6-й[25]. Такую кодировку называли USASCII-8[26].
.0 | .1 | .2 | .3 | .4 | .5 | .6 | .7 | .8 | .9 | .A | .B | .C | .D | .E | .F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0. | NUL | SOM | EOA | EOM | EQT | WRU | RU | BELL | BKSP | HT | LF | VT | FF | CR | SO | SI |
1. | DC0 | DC1 | DC2 | DC3 | DC4 | ERR | SYNC | LEM | S0 | S1 | S2 | S3 | S4 | S5 | S6 | S7 |
2. | ||||||||||||||||
3. | ||||||||||||||||
4. | BLANK | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / |
5. | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
6. | ||||||||||||||||
7. | ||||||||||||||||
8. | ||||||||||||||||
9. | ||||||||||||||||
A. | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
B. | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ↑ | ← |
C. | ||||||||||||||||
D. | ||||||||||||||||
E. | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | |
F. | p | q | r | s | t | u | v | w | x | y | z | ESC | DEL |
На компьютерах с минимально адресуемой единицей памяти в 36 бит поначалу использовали 6-битные символы (1 слово = 6 символов). После перехода на ASCII на таких компьютерах в одном слове стали размещать либо 5 семибитных символов (1 бит оставался лишним), либо 4 девятибитных символа.
Ввод с клавиатуры
[править | править код]Расположение символов ASCII на клавиатуре согласно ANSI X4.14-1971: символы верхнего регистра вводятся в сочетании с клавишей ⇧ Shift, а управляющие символы — с Ctrl[27].
1
2
3
4
5
6
7
8
9
0
-
^
\
q
w
e
r
t
y
u
i
o
p
@
[
␡
a
s
d
f
g
h
j
k
l
;
:
]
z
x
c
v
b
n
m
,
.
/
Коды ASCII используются в программировании как промежуточные кроссплатформенные коды нажатых клавиш (в противовес скан-кодам IBM PC и прочим внутренним кодам). Ниже приведена таблица соответствия кодов клавишам для раскладки клавиатуры QWERTY[28].
Национальные варианты и расширения
[править | править код]7-битные коды
[править | править код]
Возможность адаптации ASCII под нужды других стран предусмотрена сразу в трёх тесно взаимосвязанных стандартах — ISO 646 Международной организации по стандартизации (ныне — ISO/IEC 646), ECMA-6 Европейской ассоциации производителей компьютеров и рекомендации V.3 (Международный алфавит № 5) Международного консультативного комитета по телеграфии и телефонии (ныне — рекомендация T.50[англ.] (Международный справочный алфавит) Сектора стандартизации электросвязи МСЭ). Для этого предлагается заменять символы @
, [
, \
, ]
, ^
, `
, {
, |
, }
и ~
на национальные. Также допускается замена знака решётки (#
) на знак фунта (£
), а знака доллара ($
) — на знак валюты (¤
). Унифицированный вариант кода, не содержащий национальные символы, при этом обозначается как IRV (от англ. International Reference Version — «международная ссылочная версия»)[c]. ISO 646 IRV был утверждён в Советском Союзе как КОИ-7 Н0 в ГОСТ 27463 (СТ СЭВ 356).
Для некоторых языков с нелатинской письменностью (русского, греческого, арабского, иврита и др.) существовали и более радикальные модификации ASCII:
- в одних на месте строчных латинских букв размещались национальные символы (для русского и греческого вариантов — заглавные буквы (как, например, в КОИ-7 Н2));
- в других предусматривалось переключение между ASCII и национальным вариантом кода «на лету» с помощью символов SO и SI; в этом случае в национальном варианте можно было полностью заменить латинские буквы на национальные символы (как, например, в КОИ-7 Н1).
8-битные коды
[править | править код]Со временем стали появляться производные 8-битные кодировки (кодовые страницы), содержащие 28 = 256 кодовых позиций, в которых нижняя половина кодовой таблицы (позиции 0x00
—0x7F
) совпадает с ASCII, а верхняя (позиции 0x80
—0xFF
) служит для размещения дополнительных, в том числе национальных, символов. Подобные ASCII-совместимые кодировки, получившие неофициальное собирательное название «Расширенный ASCII[англ.]», оказались удобнее упомянутых ранее 7-битных вариантов и широко использовались вплоть до начала повсеместного внедрения Юникода. Впрочем, отсутствие единого подхода к размещению национальных символов в их кодовых таблицах (например, кириллицы в КОИ-8, Windows-1251, ISO 8859-5 и т. д.) порождало множество проблем. Так, например, когда почтовые клиенты отправителя и получателя электронного письма использовали различные кодировки для его интерпретации, текст письма (за исключением символов ASCII) становился нечитаемым.
Юникод
[править | править код]Символы ASCII включены в Юникод под теми же самыми кодами (0x00
—0x7F
), благодаря чему UTF-8 полностью обратно совместим с 8-битным представлением ASCII. Таким образом, Юникод можно рассматривать как одно из расширений ASCII.
См. также
[править | править код]Примечания
[править | править код]Комментарии
[править | править код]- ↑ В качестве знаков умножения (×) и деления (÷) было решено использовать астериск (*) и косую черту (/).
- ↑ 1 2 В старых шрифтах апостроф (') рисовался с наклоном влево, а тильда (~) была сдвинута вверх, поэтому они могли использоваться в качестве символов «акут» (´) и «тильда сверху» (˜).
- ↑ Действующие редакции международных ссылочных версий всех трёх упомянутых стандартов полностью совпадают с ASCII.
Источники
[править | править код]- ↑ ASCII (англ.). The Cambridge English Dictionary. dictionary.cambridge.org. Дата обращения: 9 апреля 2018. Архивировано 27 сентября 2017 года.
- ↑ Mackenzie, 1980, p. 211.
- ↑ Internet Assigned Numbers Authority. Character Sets (англ.). Дата обращения: 18 ноября 2024. Архивировано 16 ноября 2024 года.
- ↑ Иллингуорт, 1990, с. 28.
- ↑ Mackenzie, 1980, p. 61.
- ↑ 1 2 Fischer, 2000, p. 11.
- ↑ 1 2 Fischer, 2000, p. 21.
- ↑ Mackenzie, 1980, p. 66.
- ↑ Mackenzie, 1980, p. 245—246.
- ↑ Mackenzie, 1980, p. 423—428.
- ↑ Fischer, 2000, p. 28.
- ↑ 1 2 3 Mackenzie, 1980, p. 240.
- ↑ Mackenzie, 1980, p. 246—247.
- ↑ Mackenzie, 1980, p. 237.
- ↑ Mackenzie, 1980, p. 234.
- ↑ 1 2 Mackenzie, 1980, p. 235.
- ↑ 1 2 Mackenzie, 1980, p. 225.
- ↑ Mackenzie, 1980, p. 226.
- ↑ Mackenzie, 1980, p. 222—224.
- ↑ Mackenzie, 1980, p. 239.
- ↑ 1 2 3 Mackenzie, 1980, p. 236.
- ↑ Mackenzie, 1980, p. 241.
- ↑ Mackenzie, 1980, p. 240—241.
- ↑ 1 2 Mackenzie, 1980, p. 214—215.
- ↑ Amdahl G. M., Blaauw G. A., Brooks F. P., Jr. «Architecture of the IBM system/360». 1964
- ↑ Mackenzie, 1980, p. 399—400.
- ↑ ANSI X4.14-1971: Alphanumeric Keyboard Arrangements Accommodating the Character Sets of ASCII and ASCSOCR (англ.)
- ↑ Keys Enum . Microsoft.com. Дата обращения: 11 июня 2022. Архивировано 11 июня 2022 года.
Литература
[править | править код]- American Standard Code for Information Interchange, ASA X3.4-1963
- USA Standard Code for Information Interchange, USAS X3.4-1967
- USA Standard Code for Information Interchange, USAS X3.4-1968
- American National Standard Code for Information Interchange, ANSI X3.4-1977
- 7-Bit American National Standard Code for Information Interchange (7-Bit ASCII), ANSI X3.4-1986
Ссылки
[править | править код]- Charles E. Mackenzie. Coded Character Sets, History and Development (англ.). — Addison-Wesley Publishing Company, inc, 1980. — ISBN 0-201-14460-3.
- Fischer, Eric The Evolution of Character Codes, 1874–1968 (англ.) 14–15 (Table 35) (20 июня 2000). Дата обращения: 30 ноября 2022. Архивировано 30 ноября 2022 года.
- Толковый словарь по вычислительным системам / Под редакцией В. Иллингуорта и др.: Пер. с английского А.К. Белоцкого и др.; Под редакцией Е.К. Масловского. — М.: Машиностроение, 1990. — ISBN 5-217-00617-X.
- Standard ECMA-6: 7-bit coded character set. 6th edition (англ.). Ecma international (декабрь 1991). Архивировано 23 августа 2011 года.
- Tom Jennings. An annotated history of some character codes or ASCII. American standard code for information infiltration (англ.) (29 октября 2004). Архивировано 17 июля 2011 года.
- ASCII chart and other resources (англ.). JimPrice.Com.