ASCII
ASCII (czyt. aski, skrót od ang. American Standard Code for Information Interchange) – siedmiobitowy system kodowania znaków, używany we współczesnych komputerach oraz sieciach komputerowych, a także innych urządzeniach wyposażonych w mikroprocesor. Przyporządkowuje liczbom z zakresu 0−127: litery alfabetu łacińskiego języka angielskiego, cyfry, znaki przestankowe i inne symbole oraz polecenia sterujące. Na przykład litera „a” jest kodowana jako liczba 97, a znak spacji jest kodowany jako 32. Większość współczesnych systemów kodowania znaków jest rozszerzeniem standardu ASCII.
ASCII jest tradycyjną nazwą tego zestawu znaków, jednak IANA zaleca używanie określenia US-ASCII[1], które podkreśla pochodzenie standardu, oraz to, pod kątem jakich znaków był projektowany (ASCII nie zawiera na przykład liter diakrytyzowanych, powszechnych w alfabetach europejskich).
ASCII znajduje się na liście kamieni milowych IEEE.
Przegląd
edytujStandard ASCII został stworzony na podstawie kodu telegraficznego. Prace nad nim rozpoczęły się 6 października 1960 roku, podczas pierwszego spotkania grupy X3.2 American National Standards Institute (ANSI). Trzy lata później, w 1963 roku[2][3][4][5], została udostępniona pierwsza wersja standardu ASCII. W porównaniu do wcześniejszych systemów kodowania znaków, ten zestaw znaków był wygodny w użyciu do sortowania alfabetycznego tekstów, zmiany wielkości znaków, a także wspierał urządzenia inne niż dalekopisy. Od czasu wprowadzenia na rynek, ASCII został czterokrotnie zaktualizowany – w 1967[5][6][7], 1968[5][8] , 1977[5] i 1986[5][9] roku.
Każdy znak w kodzie ASCII jest przedstawiany jako 7-bitowa liczba całkowita[10]. 95 spośród nich stanowią znaki drukowalne: małe i wielkie litery alfabetu łacińskiego, cyfry, znaki przestankowe oraz inne symbole. Standard ten został stworzony do obsługi języka angielskiego, dlatego pośród liter, które znajdują się w tabeli, nie ma żadnych diakrytyzowanych. Większość znaków sterujących jest dzisiaj przestarzała – zostały one pomyślane głównie dla dalekopisów[11].
Standard ASCII był najpopularniejszym zestawem znaków używanym w internecie do grudnia 2007, kiedy to został zastąpiony przez UTF-8. Kodowanie UTF-8 jest wstecznie kompatybilne z ASCII[12][13][14].
Historia
edytujKod ASCII został opublikowany jako standard ASA X3.4-1963[3][15]. Zestaw znaków w niewielkim stopniu różnił się od obecnego. Nieprzypisana była 1 sekwencja sterująca oraz 28 pozycji zarezerwowanych do późniejszego wykorzystania[16]. W grupie roboczej toczyła się dyskusja, czy należy do kodu wprowadzić małe litery, czy też więcej znaków sterujących[17]. W maju 1963 zadecydowano, by tzw. patyki[a][18] szósty i siódmy[19] wypełnić małymi literami alfabetu łacińskiego. Spowodowało to, że między wielką a małą literą jest tylko jeden bit różnicy (np. literze „A” jest przyporządkowany kod 65 (1000001), a „a” – 97 (1100001)), co ułatwiało konstruowanie klawiatur oraz porównywanie tekstów nieuwzględniające wielkości liter. Ta zmiana weszła do standardu ASCII dopiero w 1967 roku.
Do standardu ASCII z 1963 roku zostały wprowadzone jeszcze następujące zmiany:
- wprowadzenie znaków takich jak nawiasy klamrowe oraz kreska pionowa[20],
- zmiana nazwy niektórych kodów kontrolnych (np. SOM zmieniono na SOH),
- przeniesienie lub usunięcie niektórych znaków kontrolnych (np. usunięto RU)[21].
Standard ASCII był uaktualniany czterokrotnie – w latach 1967, 1968, 1977 i 1986. Przygotowany został także piąty standard – z 1965 roku, ale nie został opublikowany (mimo wszystko był używany przez niektóre maszyny IBM)[4][5][8] .
Założenia przyjęte podczas projektowania
edytujLiczba bitów
edytujGrupa X3.2 projektowała ASCII na podstawie dawniejszych zestawów znaków, przeznaczonych dla dalekopisów. Zawierały one 26 liter, 10 cyfr oraz od 11 do 25 symboli. Aby uwzględnić je wszystkie oraz znaki kontrolne zgodne ze standardami CCITT ITA2 (1924)[22][23], FIELDATA (1956–57) oraz wczesnym EBCDIC (1963), potrzeba było więcej niż 64 znaki. Można by je zmieścić na 6 bitach, używając dwóch zestawów znaków i specjalnych kodów SHIFT zmieniających używany zestaw (jak np. w ITA2). Jednak wiadomości zakodowane w ten sposób łatwo mogły ulec zniekształceniu, ponieważ przekłamanie podczas transmisji kodu SHIFT mogłoby zmienić brzmienie dużej części tekstu. Grupa odpowiedzialna za sformułowanie standardu ASCII sprzeciwiała się temu, dlatego kod musiał używać co najmniej 7 bitów na jeden znak[24].
Rozważano także wykorzystanie ośmiu bitów, co pozwoliłoby na zastosowanie większego zestawu znaków, jednak zadecydowano, że ASCII będzie siedmiobitowy, ponieważ każdy dodatkowy bit zwiększyłby długość wiadomości, a co za tym idzie – również koszt jej przesłania. Ówczesne karty dziurkowane mogły przechować na jednej pozycji osiem bitów, co można było wykorzystać do przechowywania bitu parzystości[25]. Urządzenia niestosujące kontroli błędów przechowywały tam 0[26]. Niektóre drukarki korzystały z ósmego bitu, by obsługiwać kursywę.
Podział na grupy znaków
edytujKod ASCII został podzielony na dwie grupy – dwa patyki (zerowy i pierwszy)[18] przeznaczone na znaki sterujące[27] oraz sześć patyków (od drugiego do siódmego) zawierających znaki drukowalne (wyjątkiem jest znak 127: DEL). Znak spacji został umieszczony pod adresem 0x20[28], czyli przed wszystkimi innymi literami, aby ułatwić sortowanie. Z tego samego względu, wiele symboli używanych jako separatory znajduje się przed literami i cyframi – na patyku drugim. Grupa robocza zadecydowała, że wydzielenie sensownego 64-znakowego (sześciobitowego) alfabetu z ASCII ma być łatwe i taki alfabet powinien być jednym ciągłym blokiem[29]. Z tego powodu małe litery nie są przeplecione z wielkimi. Wielka litera A została umieszczona na pozycji 0x41, w celu zgodności z brytyjską propozycją standardu kodowania znaków[30]. Cyfry 0–9 składają się z bitów 011 oraz, następującej po nich, binarnej reprezentacji liczb odpowiadających każdej z cyfr. Ułatwia to konwersję liczb na system binary-coded decimal.
Pozycja większości znaków niealfanumerycznych jest związana z ich umiejscowieniem na klawiaturach mechanicznych maszyn do pisania[31]. Standardowy układ klawiszy pochodzi z maszyny Remington No. 2 z 1878 roku, pierwszej z klawiszem ⇧ Shift. Klawiszom 23456789-
odpowiadały, kolejno, znaki "#$%_&'()
. Początkowo, na klawiaturach maszyn do pisania nie używano cyfr 0 i 1, ponieważ mogły one być zastąpione przez O (wielkie o) oraz l (małe L). Pary 1!
oraz 0)
stały się popularne, gdy klawisze z tymi cyframi weszły do użycia. Znaki !"#$%
zostały umieszczone na drugim patyku, obok odpowiadających im cyfr[18]. Ze względu na to, że zero znajduje się w tabeli kodu ASCII obok spacji i nie można tam wstawić nawiasu zamykającego, znak podkreślenia został usunięty (wstawiono go w 1967 roku za wielkimi literami), a za procentem znajdują się znaki odpowiadające kolejnym cyfrom (tj. &'()
). Taki układ był często spotykany na europejskich maszynach do pisania. Para znaków /?
pochodzi również z maszyny No. 2, natomiast ,< .>
były używane tylko na części klawiatur. Na pozostałych kropkę i przecinek można było wpisać zarówno z naciśniętym klawiszem ⇧ Shift, jak i bez niego. Standard ASCII rozbił znaki ;:
, spotykane dotąd na jednym klawiszu, oraz zmienił układ symboli matematycznych (zamiast najczęstszego wariantu -* =+
było :* ;+ -=
).
Niektóre, popularne w USA znaki, takie jak ½¼¢
, nie zostały uwzględnione, podczas gdy wprowadzono: diakrytyki ^`~
do użytku międzynarodowego oraz znaki <>\|
. Symbol @ nie był powszechny w Europie, dlatego grupa X3.2 spodziewała się umieszczenia w jego miejscu litery À we francuskiej odmianie standardu. Z tego względu małpa została umieszczona na pozycji 0x40, czyli tuż przed wielkim A[32].
Najważniejszymi kodami sterującymi były: Start of message (SOM), End of address (EOA), End of message (EOM), End of transmission (EOT), Who are you? (WRU), Are you? (RU), Reserved device control (DC0), Synchronous idle (SYNC) i Acknowledge (ACK). Zostały one rozmieszczone w ten sposób, by odległość Hamminga między nimi była jak największa[33].
Podział
edytujZnaki sterujące
edytujStandard ASCII przeznacza pierwsze 32 kody (0–31) na znaki sterujące. Nie są one przeznaczone do przenoszenia drukowalnych symboli, lecz do sterowania urządzeniem odbierającym dane. Na przykład, znak 10 (LF) oznaczający przejście do nowej linii, powoduje przesunięcie papieru w drukarce, a znak 8, czyli Backspace powodował cofnięcie karetki o jedno pole. ASCII nie definiuje żadnego mechanizmu pozwalającego na formatowanie tekstu w obrębie jednej linii.
Znaki drukowalne
edytujKody 0x20 – 0x7E reprezentują litery, cyfry oraz inne, możliwe do wyświetlenia na ekranie, symbole. Standard ASCII definiuje łącznie (wliczając spację) 95 znaków drukowalnych: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Wcześniejsze wersje ASCII zawierały strzałkę do góry zamiast karety oraz strzałkę w lewo zamiast znaku podkreślenia[3][34].
Rozszerzenia
edytujPonieważ kod ASCII jest 7-bitowy, a większość komputerów operuje na 8-bitowych bajtach, dodatkowy bit można wykorzystać na powiększenie zbioru kodowanych znaków do 256 symboli. Powstało wiele różnych rozszerzeń ASCII, ponad 220 stron kodowych DOS i Windows, wykorzystujących ósmy bit (np. norma ISO 8859, rozszerzenia firm IBM lub Microsoft) nazywanych stronami kodowymi. Również kodowanie UTF-8 można uważać za rozszerzenie ASCII, tutaj jednak dodatkowe znaki są kodowane na 2 i więcej bajtach[35]. Formalnie, mianem rozszerzeń ASCII można nazwać jedynie te standardy, które zachowują układ pierwszych 128 znaków i dodają nowe na końcu tabeli.
Zestawy 7-bitowe
edytujASCII było od początku projektowane jako jedna z wielu narodowych wersji międzynarodowego zestawu znaków. W Europie popularny był standard ISO 646, oparty na ASCII, który rezerwował określone pozycje (odpowiadające m.in. znakom: {}[]|\^~#$
) dla liter używanych w narodowych językach oraz dla lokalnego symbolu waluty.
Ze względu na to, że niektóre symbole zamieniono w ISO 646 na litery, programista w Europie musiał wybrać, czy chce na swoim komputerze korzystać z lokalnych liter, czy też z pierwotnie przypisanych znaków. Wybranie pierwszego powodowało, że kod stawał się mniej czytelny – zamiast { a[i] = '\n'; }
w polskiej odmianie standardu wyświetlone zostałoby ł aźiń = '\n'; ć
[36].
Zestawy 8-bitowe
edytujWraz z rozwojem komputerów oraz spadkiem kosztów transmisji danych, zaczęły się pojawiać 8-bitowe zestawy znaków. Pojawiły się standardy z rodziny ISO 8859 oraz Windows-125x, które zapewniały obsługę liter narodowych używając do tego zakresu 128–255, jednocześnie pozostawiając nietknięty obszar wspólny z ASCII. Alfabet polski był wspierany przez kodowanie ISO 8859-2 oraz Windows-1250.
Unicode
edytujUnicode oraz Universal Character Set (UCS, ISO 10646) obsługują znacznie większą liczbę znaków, dzięki czemu wszystkie alfabety używane na świecie mogą zostać umieszczone w jednym kodowaniu. Są one wstecznie kompatybilne z ASCII (tekst składający się wyłącznie ze znaków 0–127 ma taką samą reprezentację w obu standardach)[37].
Tabela kodów ASCII
edytuj
|
|
|
|
Zobacz też
edytujPrzypisy
edytuj- ↑ Character Sets. iana.org. [dostęp 2018-07-15]. (ang.).
- ↑ Mary Brandel: 1963: The Debut of ASCII. CNN, 6-07-1999. [dostęp 2018-07-16]. (ang.).
- ↑ a b c American Standard Code for Information Interchange, ASA X3.4-1963. American Standards Association (ASA), 1963-06-17. [dostęp 2018-07-16]. (ang.).
- ↑ a b Dik T. Winter: US and International standards: ASCII. [dostęp 2018-07-16]. (ang.).
- ↑ a b c d e f Tuomas Salste: 7-bit character sets: Revisions of ASCII. [dostęp 2018-07-16]. [zarchiwizowane z tego adresu (2016-06-13)]. (ang.).
- ↑ USA Standard Code for Information Interchange, USAS X3.4-1967, United States of America Standards Institute (USASI), 7 lipca 1967(ang.).
- ↑ Thomas Daniel Jennings: An annotated history of some character codes or ASCII: American Standard Code for Information Infiltration. World Power Systems (WPS), 2016-04-20. [dostęp 2018-07-16]. (ang.).
- ↑ a b Mackenzie ↓.
- ↑ 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 (ANSI), 26 marca 1986(ang.).
- ↑ R. Shirey , Internet Security Glossary, Version 2, FYI 36, RFC 4949, IETF, sierpień 2007, DOI: 10.17487/RFC4949, ISSN 2070-1721, OCLC 943595667 (ang.).
- ↑ Anil Kumar Maini: Digital Electronics: Principles, Devices and Applications. John Wiley and Sons, 2007, s. 28. ISBN 978-0-470-03214-5. Cytat: In addition, it defines codes for 33 nonprinting, mostly obsolete control characters that affect how the text is processed.. (ang.).
- ↑ Karl Dubost: UTF-8 Growth on the Web. World Wide Web Consortium, 2008-05-06. [dostęp 2018-07-18]. [zarchiwizowane z tego adresu (2016-06-16)]. (ang.).
- ↑ Mark Davis: Moving to Unicode 5.1. Google Blog, 2008-05-05. [dostęp 2018-07-18]. [zarchiwizowane z tego adresu (2016-06-16)]. (ang.).
- ↑ Mark Davis: Unicode nearing 50% of the web. Google Blog, 2010-01-28. [dostęp 2018-07-18]. [zarchiwizowane z tego adresu (2016-06-16)]. (ang.).
- ↑ Ed Bukstein. Binary Computer Codes and ASCII. „Electronics World”. 72, s. 28–29, 07 1964. Poptronix Inc.. [dostęp 2016-05-22]. (ang.).
- ↑ Mackenzie ↓, s. 66, 245.
- ↑ Mackenzie ↓, s. 435.
- ↑ a b c Chapter 1: Inside ASCII. W: Robert William Bemer: General Purpose Software. Portland, OR, USA: dilithium Press, 1980, s. 1–50, seria: Best of Interface Age. ISBN 0-918398-37-1. LCCN 79-67462. [dostęp 2018-07-16]. (ang.).
- ↑ Brief Report: Meeting of CCITT Working Party on the New Telegraph Alphabet, May 13–15, 1963.(ang.).
- ↑ Report of Meeting No. 8, Task Group X3.2.4, December 17 and 18, 1963(ang.).
- ↑ Mackenzie ↓, s. 247–248.
- ↑ BruXy: Radio Teletype communication. 2005-10-10. [dostęp 2018-07-16]. Cytat: The transmitted code use International Telegraph Alphabet No. 2 (ITA-2) which was introduced by CCITT in 1924. (ang.).
- ↑ Gil Smith: Teletype Communication Codes. Baudot.net, 2001. [dostęp 2018-07-16]. (ang.).
- ↑ Mackenzie ↓, s. 215, 236 §4.
- ↑ Mackenzie ↓, s. 217, 236 §5.
- ↑ Stanley A. Sawyer, Steven George Krantz: A TeX Primer for Scientists. CRC Press, LLC, 1995, s. 13. ISBN 978-0-8493-7159-2. (ang.).
- ↑ Mackenzie ↓, s. 220, 236 §8,9.
- ↑ Mackenzie ↓, s. 237 §10.
- ↑ Mackenzie ↓, s. 228, 237 §14.
- ↑ Mackenzie ↓, s. 238 §18.
- ↑ John J. G. Savard: Computer Keyboards. [dostęp 2018-07-17]. (ang.).
- ↑ Mackenzie ↓, s. 243.
- ↑ Mackenzie ↓, s. 243–245.
- ↑ Jim Haynes: First-Hand: Chad is Our Most Important Product: An Engineer's Memory of Teletype Corporation. Engineering and Technology History Wiki (ETHW), 2015-01-13. [dostęp 2018-07-17]. [zarchiwizowane z tego adresu (2016-10-31)]. (ang.).
- ↑ ASCII Table: 7-bit. [dostęp 2018-07-18]. [zarchiwizowane z tego adresu (2018-07-09)]. (ang.).
- ↑ Czcionki i polskie znaki w CPC. [dostęp 2018-07-18].
- ↑ utf-8(7) – Linux manual page. Man7.org, 2014-02-26. [dostęp 2014-04-21]. (ang.).
Uwagi
edytuj- ↑ Znaki w kodzie ASCII zostały podzielone na osiem grup po 16 znaków w każdej, nazywane po angielsku sticks. Grupy ponumerowano od 0 do 7, zgodnie z trzema najstarszymi bitami. Na ilustracji na początku artykułu patyki odpowiadają kolumnom w tabeli kodu ASCII.
Bibliografia
edytuj- Charles E. Mackenzie: Coded Character Sets, History and Development. Addison-Wesley Publishing Company, Inc., 1980, s. 66, 215, 217, 220, 228, 236–238, 243–245, 247–248, 435, seria: The Systems Programming Series. ISBN 0-201-14460-3. LCCN 77-90165. [dostęp 2018-07-15]. (ang.).
Linki zewnętrzne
edytuj- On the Early Development of ASCII – The History of ASCII. [zarchiwizowane z tego adresu]. (ang.).
- The Evolution of Character Codes, 1874–1968. (ang.).