ASCII (акронимотанглийски:American Standard Code for Information Interchange – „Американски стандартен код за обмен на информация“, чете се „аски“[1]) есимволна кодова таблица на основата налатинската азбука. ASCII кодът служи за представяне на текст в компютрите и други комуникационни и управляващи устройства. Всички съвременни устройства, използващи писмени знаци, поддържат ASCII, както и множество допълнителни символи. До 2007 ASCII е най-използваната символна таблица вWorld Wide Web(WWW), но след това я изместваUTF-8, която е надмножество на ASCII.[2][3][4]
ASCII е разработен въз основа на някои телеграфни кодове. Работата по стандарта започва на 6 октомври 1960 г., когато е първото събрание на Американската асоциация за стандартизация, подкомитет X3.2. Първото издание на стандарта, публикувано през 1963 г.,[5][6] преминава през сериозни промени през 1967 г.,[7][8] а най-скорошната актуализация е през 1986 г.[9] В сравнение с по-ранните телеграфни кодове, подреждането на знаците в ASCII е по-удобно за сортиране на списъци и за устройства, различни от телепринтерите.
ASCII дефинира кодове за 33 непечатими контролни символа (които служат за управление на устройства за обработка на текст) плюс следните 95 печатими символа (първият от които е знакът интервал):
ASCII определя еднозначно съответствие между двоични кодове и писмени знаци (глифи), правейки възможна обмяната на текстова информация между отделни цифрови устройства, както и нейното съхраняване в тези устройства. Важно е да се отбележи, че ASCII определя съответствие между кода исемантичната стойност на глифа, а не негова конкретна реализация. Компютърните шрифтове определят реализациите на глифите. Да вземем за пример главната латинска буква A – нейният двоичен код е 0100 0001, което е 65 в десетичен код. В един обикновен текстов файл в ASCII код тя ще бъде представена именно с този код – 65. Но за да се изобрази на екрана, е нужен шрифт, който от своя страна съпоставя на този код някакво изображение. Това изображение е различно при отделнитешрифтове, но смисълът му е един и същ – главна латинска буква A.
ASCII е 7-битов код, което означава, че може да представи 128 символа. Той често се допълва до 8 бита чрез добавяне на една или повече допълнителниазбуки (освен латинската). По времето на своето създаване за изход на текст са се използвали предимно печатащи устройства. Затова в ASCII се съдържат и контролни кодове, уточняващи начина, по който да се отпечатат символите.
Американският стандартен код за обмен на информация се разработва под ръководството на Американската асоциация за стандартизация (наричана комитет X3), от подкомитета X3.2, а по-късно – от подкомитета X3.2.4. След като се преименува, днес Американската асоциация за стандартизация се наричаАмерикански институт за стандартизация
През 60-те години на XX век липсва общ стандарт и всеки производител на хардуер използва собствен код. По това време има над шестдесет различни начина за представяне на символи, но различните машини не могат да обменят информация поради различното представяне на буквите, цифрите и другите символи. СамоIBM използва девет различни поредици от символи за различните си устройства.
Боб Бъмър – програмист в IBM, наричан баща на ASCII – обръща внимание, че с използването на девет различни стандарта машините на IBM не могат да комуникират помежду си, а още по-малко с машините от останалия свят. През май 1961 г. той предлага наАмериканския институт за стандартизация да се въведе и използва общ стандарт между компютрите. За работа по проекта се създава подкомитет X3.2, съставен от представители на повечето производители на компютри.
Всеки от производителите настоява да запази своя начин на представяне на символите. Повече от две години са нужни на комитета, за да постигнат съгласие за един общ код. Подкомитетът X3.2 разработва ASCII на базата на по-ранните системи за кодиране нателепринтерите. Подобно на други символни кодировки, ASCII определя съответствие на цифровите битови шаблони със символи (печатими и непечатими). Това позволява на кодиращите устройства да обменят, обработват и запазват информация в символен вид. За да включи 26-те латински букви, 10-те арабски цифри и специалните символи (от 11 до 25 при различните тогавашни кодировки), новият код трябвало да съдържа над 64 знака.
Обсъждало се е да бъде вкарана променяща функция, която да позволи над 64 знака да бъдат представени в 6-битов код. Това би направило кодировката по-икономична, но по-малко надеждна за предаване на данни, тъй като грешка в променящия код ще направи данните нечетими. Това предложение се отхвърля и се решава, че ASCII ще бъде 7-битов код.
Комитетът обсъжда и 8-битов код, тъй като това би позволило два 4-битови шаблона за ефективно представяне на двоично кодирано десетично число. Само че това би изисквало при всеки обмен на данни да се пращат осем бита, дори когато седем са достатъчни. За да се намалят разходите по изпращане на данни, комитетът избира 7-битов код.
Първата публикация на ASCII става през 1963 г. от комитета като били оставени 28 символа без предназначение за по-късна стандартизация. Дебатирало се е дали да бъдат вкарани още контролни символи вместо малките букви от английската азбука, но било взето решение малките букви да бъдат вкарани на 6 – 7 колона. Това породило разлика между битовите шаблони на малките и големите букви с един бит, което опростило намирането на сходство между две букви, без да се има предвид дали е малка или голяма буква, по-лесно, а също улеснило правенето на принтери и клавиатури.
За първи път с търговска насоченост ASCII е използван на 7-битов телепринтерски код за мрежата TWX (TeletypeWriter eXchange) на „American Telephone and Telegraph Company“ (АТ§Т) през 1963. От 1963 до 1964 Ай Би Ем работят здраво по новата си операционна система/360 (OС/360), но когато операционната система била готова станало ясно, че няма да успеят да завършват принтерите иперфокартите навреме за официалното пускане на системата на пазара. Това, което се опитали да направят е да дадат възможност на операционната система да превключва между ASCII и EBCDIC (8-битова кодировка използвана от Ай Би Ем), но начинанието завършило с неуспех.
След проваления опит на Ай Би Ем да прокара общ стандарт в технологиите си се създава дупка от 18 години, в които не се чува нищо за ASCII. Работата на производители продължава по същия начин, както преди създаването на ASCII, а единствения компютър използвал този стандарт през тези 18 години е UNIVAC 1050.
Първият компютър на Ай Би Ем бил произведен през тази година и отбелязва началото на използването на ASCII в компютрите. Това е най-важното събитие за стандарта, който предстои да се превърне в глобално използван. Оттогава нататък всеки един компютър е правен така, че да е възможно най-съвместим с ASCII. Възникват и разширени стандарти, които отново са ASCII базирани.
ASCII е все още използван, изключвайки„Windows“ машините, които използватуникод.
Първоначално ASCII таблицата е създадена за обмен на информация между терминали ипериферни устройства. ASCII запазва първите 32 символа (кодове с номера 0 – 31) за контролни знаци: служещи да контролират устройства (като принтери), които ползват ASCII за да предоставят мета-информация за потоци от данни, обработвани и съхранявани на различни видове носители. Например, код 10 представлява функция за „нов ред“ (което кара принтера да подава хартия), а код 8 представлява „връщане назад“.
Едно от първите устройства ползващи ASCII e Теле-шрифт модел 33 ASR, което е било терминал за печат с перфо-лента с опция четене и писане. Перфо-лентата е била много популярно средство за дългосрочно съхранение на данни до 1980 г. – значително по-евтини и в някои отношения по-стабилни носители от магнитна лента. Теле-шрифт Model 33 ползва кодове 17 (Control-Q, DC1, известен също като XON), 19 (Control-S, DC3, известен също като XOFF) и 127 (Изтриване), които дефакто стават стандарти. В модела 33 за пръв път е използвана и звуковата индикация Control-G (BEL) – конструирана със звънец, който се задейства механично, като получи BEL символ.
Някои видове софтуер дават специални значения на ASCII символите, изпращани от терминала до софтуера. Операционните системи от Digital Equipment Corporation, например, тълкуват DEL като команда „изтрии последно въведения символ“. Тази интерпретация също се използва често при Unix системи. Повечето други системи, използват BS вместо DEL за тази функция, а DEL означава „изтрии символа на мястото на курсора“. Символът „escape“ (код 27) е първоначално замислян да изпраща контролни символи като литерали, вместо да извиква тяхното значение. Същото значение на „escape“ се среща и вURL кодирането, низове везика C и други системи, в които определени символи имат запазено значение. С времето, това значение е било променено.
Поради появилите се с времето интерпретации на контролните символи неминуемо се появяват и проблеми при прехвърляне на файлове между системите. Най-добрия пример за това е проблемът с „новия ред“ на различниоперационни системи.
В библиотеките на С и конвенциите наUnix, символът „null“ се използва да се прекратисимволен низ. Такива низове са познати като „ASCIIZ“ като „Z“ представлява „0“ (zero).
В днешно време идеята за ASCII таблицата е доразвита и управлението на потоците от данни става с форматиращи файлове, езици за управление на устройства (катоPostScript) и стандартнипротоколи. Поради тази причина много от контролните символи вече или изобщо не се използват или се използват не по първоначалното им предназначение.
Този символ не прави нищо. Някои терминали го изобразяват като интервал, но това е неправилно.
0000 0001
001
1
01
SOH
␁
^A
Start of Heading
Начало на заглавие
В днешно време се използва в маршрутизатори на CISCO.
0000 0010
002
2
02
STX
␂
^B
Start of Text
Начало на текст
В днешно време се използва в маршрутизатори на CISCO.
0000 0011
003
3
03
ETX
␃
^C
End of Text
Край на текст
При въвеждане в терминала обикновено се интерпретира като сигнал за презареждане.
0000 0100
004
4
04
EOT
␄
^D
End-of-transmission character
Край на предаване
Unix ситемите го интерпретират като край на входните данни. Текущата програма е прочела данните от терминала приключва четенето и обработва цялата информация до символа ^D.
0000 0101
005
5
05
ENQ
␅
^E
Enquiry
Повикване
Използва се в телетайпните системи (теграфи).
0000 0110
006
6
06
ACK
␆
^F
Acknowledgement
Потвърждение
Използва се в телетайпните системи (теграфи).
0000 0111
007
7
07
BEL
␇
^G
Bell
Звънец
Ако принтера или терминала получи таккъв символ той не отпечатва нищо, но произвежда звуков сигнал.
0000 1000
010
8
08
BS
␈
^H
Backspace
Връщане назад
Премества позицията на печатното устройство един символ назад.
0000 1001
011
9
09
HT
␉
^I
Horizontal Tab
Хоризонтална табулация
Премества позицията на печатното устройство към следваща позиция.
0000 1010
012
10
0A
LF
␊
^J
Line feed
Нов ред
Премества позицията за печат един ред надолу или разделя текстов файл в Unix системите.
0000 1011
013
11
0B
VT
␋
^K
Vertical Tab
Вертикална табулация
Премества печатното устройство в следващата позиция по вертикал.
0000 1100
014
12
0C
FF
␌
^L
Form feed
Следваща страница
Изтрива печата на текущата страница и започва печат на следващата. На терминалните устройства този символ обикновено е еквивалентен на изчистване на екрана.
0000 1101
015
13
0D
CR
␍
^M
Carriage return
Връщане в изходно положение
Премества печатащата глава на принтера в крайно ляво – изходно положение.
0000 1110
016
14
0E
SO
␎
^N
Shift Out
Режим на въвеждане
Превключва режима на въвеждане на текущия език.
0000 1111
017
15
0F
SI
␏
^O
Shift In
ACSII режим на въвеждане
Превключва на латински режим на писане.
0001 0000
020
16
10
DLE
␐
^P
Data Link Escape
Игнориране на управляващ символ
Означава, че следващия символ трябва да се приеме буквално, а не като управляващ.
0001 0001
021
17
11
DC1
␑
^Q
Device Control 1 (или XON)
Управление на устройство код 1
Разрешава на терминала да продължи да приема данни.
0001 0010
022
18
12
DC2
␒
^R
Device Control 2
Управление на устройство код 2
0001 0011
023
19
13
DC3
␓
^S
Device Control 3 (или XOFF)
Управление на устройство код 3
Временно да прекрати приемането на данни.
0001 0100
024
20
14
DC4
␔
^T
Device Control 4
Управление на устройство код 4
0001 0101
025
21
15
NAK
␕
^U
Negative Acknowledgement
Отрицателно потвърждение
Означава, че устройството е заето.
0001 0110
026
22
16
SYN
␖
^V
Synchronous Idle
Синронен режим
Синхронизиран обмен на данни.
0001 0111
027
23
17
ETB
␗
^W
End of Trans. Block
Край на блока на предаване
0001 1000
030
24
18
CAN
␘
^X
Cancel
Отмяна
Данните, които са дошли преди този символ са некоректни.
0001 1001
031
25
19
EM
␙
^Y
End of Medium
Край на носителя
Използва се например, ако е свършила перфолентата.
0001 1010
032
26
1A
SUB
␚
^Z
Substitute
Замяна
Поставя се на мястото на символи, които са били изгубени при приемането на данните. В MS-DOS се използва за край на текстов файл и край на входящата от конзолата информация. Някои текстови редактори под DOS го добавят автоматично в края на файла.
0001 1011
033
27
1B
ESC
␛
^[
Escape
Алтернативен регистър
Следващия символ има значение различно от значението му определено от ASCII.
0001 1100
034
28
1C
FS
␜
^\
File Separator
Файлов разделител
0001 1101
035
29
1D
GS
␝
^]
Group Separator
Разделител на групи
0001 1110
036
30
1E
RS
␞
^^
Record Separator
Разделите на записа
0001 1111
037
31
1F
US
␟
^_
Unit Separator
Разделител по полета
0111 1111
177
127
7F
DEL
␡
^?
Delete
Изтриване
Изобразимо Представяне,Unicode глифите представящи контролните символи когато е необходимо те да се отпечатат или изобразят вместо да се използват по предназначение. Понякога вместо това се използва представянето с каретка съответстващо на начина на въвеждане.
Клавишна Комбинация, стандартната клавишна комбинация използвана за въвеждане на контролните символи. Каретката (^) представя клавиша Control (Ctrl) който трябва да се задържи докато се натиска следващия клавиш от комбинацията.
Символите Backspace, Delete, Escape и Carriage Return могат да бъдат въведени и чрез натискане на съответните клавиши –← Backspace (или Bksp, ←),Delete (Del),Escape (или Esc),Carriage Return (или Return, Ret, Enter, ↵)
Някои системи превеждат символът Delete в Backspace. В тези случаи Delete може да се въведе и чрез клавиша или клавишните комбинации за Backspace.
След първите 32 контролни знаци в ASCII таблицата са вкарани 95 печатаеми или входни знаци. Това са текстови символи представени чрез числа: 26 малки английски букви, 26 големи английски букви, 10 цифри, 32 препинателни знаци и 1 интервал. Тоест в ASCII таблицата са вкарани всички символи, които трябва да бъдат изобразявани, за да може един текст да бъде прочетен, затова и те се наричат печатаеми символи. Кодът 20hex,„space“ клавишът обозначава интервал между думите. Интервалът се счита за невидим символ и затова се причислява към печатаемите знаци, а не към контролните.
Тъй като компютърните технологии се разпространяват из целия свят, различни стандарти и корпорации разработват различни вариации на ASCII. Целта им е да допълнят липсващите не-английски символи в останалите езици базирани на латинската азбука. Този тип вариации се наричаASCII разширения, въпреки че често този термин се използва за всички варианти, включително и тези които не запазват ASCII символите в 7 битовия обхват. Обратното също се наблюдава – ASCII разширенията биват погрешно наричани ASCII.
Много страни са разработили собствени варианти на ASCII, за да включат букви, които не се използват в английския език (напр.é,ñ,ß,Ł), символи за валута (напр.£,¥), и др.
От зората на разработката си, ASCII е планиран да бъде един от няколко варианта на символно кодиране за англоговорещите страни, включени в международния стандарт. Този стандарт е публикуван под иметоISO/IEC 646 през 1972 г. В него общо използваните символи винаги стоят на една и съща позиция, докато останалите се променят за нуждите на определена дейност или етническа група.
През 4-те години между публикацията на ASCII-1963 и приемането на международен стандарт ISO през 1967, ASCII се утвърждава дотолкова, че на практика се приема за световния стандарт. Останалите страни я приемат за основна и я променят според своите нужди, което неминуемо довежда до обърквания и несъвместимости.
ISO/IEC 646, подобно на ASCII, е 7 битово символно кодиране. Той не е допускал включването на допълнителни кодове, така че в различните страни са се използвали различни символи за един и същ код. Специални кодове са били дефинирани, които да указват за чия нужда е предназначен даден текст. Често обаче тези указващи кодове не са били използвани, което в определени ситуации е довеждало до грешно интерпретирани кодове и съответно, грешно изписани символи.
В ASCII, различните видове скоби са били означени като символи разрешени за промяна. За нуждите на езици като немски, френски, шведски и други, в които се използват букви с ударение, символите със скоби са били заместени със символи за букви. Това засегнало особено програмистите, които използвайки различен от американския вариант на ISO/IEC 646, получавали трудно четим код:
ä aÄiÜ = 'Ön'; ü
вместо правилния:
{ a[i] = '\n'; }
C trigraph е бил създаден за да реши този проблем при езика C (ANSI C). Късното му представяне обаче го обричат на ограничена употреба. Много програмисти по това време вече са били свикнали компютърът им да използва US-ASCII и неудобството понякога да виждат скоби в средата на думите. Използването на US-ASCII от шведи, например ги е принуждавало да заместват ударените букви, със скобата съответстваща на същия код: Тоест трябвало е да напишат „N{ jag har sm|rg}sar.“, за да може отсрещната страна, която използва шведски стандарт да види правилното „Nä jag har smörgåsar.“
Скоро, след като 8, 16 и 32 битовите компютри започват да изместват 18 и 36 битовите, започва и използването на 8 бита за съхранение на символ в паметта. Допълнителния бит позволява двойно да се увеличат ASCII кодовете, като оригиналния ASCII се запази в позиции от 0 до 127. За допълнителните символи са предвидени местата от 128 до 255.
Повечето ранни компютърни системи използват собствени версии на 8 битовата подредба, обикновено съдържащи символи за чертане на различни видове линии или за изобразяване на елементи в игрите. Някои дори подменят дори и контролните символи от 0 до 31.KayproCP/M компютрите използват „горните“ 128 символа за гръцката азбука.IBM-ските компютри дефиниратcode page 437, която подменя контролните символи с графични (напр. усмихнато лице) и добавя още 128 графични символи в разширените позиции.Digital Equipment Corporation разработваMultinational Character Set (DEC-MCS) – първото разширение на ASCII фокусирано върху многоезичната поддръжка, вместо върху символите за рисуване или чертане.
КомпаниятаМакинтош с технияMac OS Roman, както и разработчиците на Postscript, също дефинират подредби акцентиращи върху чуждоезичните букви и печатарските символи, вместо върху символите с графични елементи.
В крайна сметка стандартаISO/IEC 8859 (водещ началото си от DEC-MCS) става шаблона, който останалите системи започват да копират (но отново включват по някоя и друга промяна). На този стандарт се базира и известното разширение наМайкрософт –Windows-1252, което добавя печатарските пунктуационни знаци, необходими при принтиране на текст. ISO-8859-1, Windows-1252, и оригиналния 7 битов ASCII са били най-разпространените символни кодировки до 2008 г., когатоUTF-8 става най-използваната.
ISO/IEC 4873 включва 32 допълнителни контролни символа на позиции от 128 до 159, като необходимост за разширяването на 7 битовото ASCII в 8 битово.
Unicode и ISO/IEC 10646Universal Character Set (UCS) разполагат с много по-голям набор от символи, и техните различни форми са започнали да изместват ISO/IEC 8859 и ASCII в много и различни разработки. В Уникод и UCS липсва ограничението на ASCII от 128 символа. При тях, всеки от символите се идентифицира с уникалноестествено число наречено code point, а броят им се ограничава единствено от използвания начин на представяне: чрез 8, 16 или 32 бита (съответно наречениUTF-8,UTF-16 иUTF-32).
За да се постигне обратна съвместимост, 256-те символа от ISO-8859-1 (Latin 1) и в частност 128-те символа от ASCII заемат едни и същи позиции в Unicode/UCS таблицата. По този начин ASCII може да се приеме като 7 битово представяне на много малка част от целия Unicode/UCS, а освен това, (когато е предшестван от 0 като 8-и бит) за ASCII може да се каже, че е валиден UTF-8.
ASCII таблицата е подредена в свой собствен ред, наричан „ASCIIbetical order“.Сравнението на данни се извършва по този начин, за разлика от традиционната азбучна подредба. Главните разнородности в ASCII подредбата са:
Всички главни букви са разположени преди малките. (Напр. „Z“ е преди „а“)
Цифрите и много пунктуационни знаци са разположени преди буквите.
Цифрите са сортирани като низове (Напр. „10“ предходжа „2“)
Таковасортиране може да бъде избегнато чрез т.нар. „запълване с нули“ (Напр. „02“ ще идва преди „10“)
↑American National Standard for Information Systems – Coded Character Sets – 7-Bit American National Standard Code for Information Interchange (7-Bit ASCII), ANSI X3.4 – 1986.American National Standards Institute,26 март 1986.