ASCII - ASCII

ASCII
Wykres kodu USASCII.png
Wykres ASCII z instrukcji drukarki sprzed 1972 r.
MIME / IANA us-ascii
Skróty) ISO-IR-006, ANSI_X3.4-1968, ANSI_X3.4-1986, ISO_646.irv:1991, ISO646-US, USA, IBM367, cp367
Języki) język angielski
Klasyfikacja Seria ISO 646
Rozszerzenia
Poprzedzony ITA 2 , FIELDATA
zastąpiony przez ISO 8859 , Unicode

ASCII ( / ć s k í / ( słuchać ) O tym dźwięku ASS -kee ), w skrócie od amerykańskiego Norma Wymiany Informacji , to znak kodowania standardem dla komunikacji elektronicznej. Kody ASCII reprezentują tekst w komputerach, sprzęcie telekomunikacyjnym i innych urządzeniach. Większość nowoczesnych schematów kodowania znaków jest oparta na ASCII, chociaż obsługują wiele dodatkowych znaków.

The Internet Assigned Numbers Authority (IANA) preferuje nazwę US-ASCII dla tego kodowania znaków.

ASCII jest jednym z kamieni milowych IEEE .

Przegląd

ASCII został opracowany z kodu telegraficznego . Jego pierwsze komercyjne wykorzystanie było jak siedmioletnim nieco Teleprinter kodu promowana przez służby danych Bell. Prace nad standardem ASCII rozpoczęły się w maju 1961 r. wraz z pierwszym posiedzeniem podkomitetu X3.2 stowarzyszenia American Standards Association (ASA) (obecnie American National Standards Institute lub ANSI). Pierwsza edycja normy została opublikowana w 1963, przeszła gruntowną rewizję w 1967, a jej ostatnia aktualizacja miała miejsce w 1986. W porównaniu z wcześniejszymi kodami telegraficznymi, zaproponowany kod Bell i ASCII zostały uporządkowane w celu wygodniejszego sortowania (tj. alfabetyzacji). ) list i dodanych funkcji dla urządzeń innych niż teledrukarki.

Użycie formatu ASCII do wymiany sieci zostało opisane w 1969 roku. Dokument ten został formalnie podniesiony do standardu internetowego w 2015 roku.

Pierwotnie oparty na alfabecie angielskim , ASCII koduje 128 określonych znaków na siedmiobitowe liczby całkowite, jak pokazano na powyższym wykresie ASCII. Można wydrukować dziewięćdziesiąt pięć zakodowanych znaków: są to cyfry od 0 do 9 , małe litery od a do z , duże litery od A do Z oraz znaki interpunkcyjne . Ponadto oryginalna specyfikacja ASCII zawierała 33 niedrukowalne kody kontrolne, które pochodziły z maszyn Teletype ; większość z nich jest obecnie przestarzała, chociaż niektóre są nadal powszechnie używane, takie jak powrót karetki , znak nowego wiersza i kody tabulacji .

Na przykład małe litery i byłyby reprezentowane w kodowaniu ASCII w postaci binarnej 1101001 = szesnastkowe 69 ( i to dziewiąta litera) = dziesiętne 105.

Historia

ASCII (1963). Obrazy kontrolne równoważnych kontrolek są wyświetlane tam, gdzie istnieją, lub szara kropka w przeciwnym razie.

American Standard Code for Information Interchange (ASCII) został opracowany pod auspicjami komitetu American Standards Association (ASA), zwanego komitetem X3, przez podkomitet X3.2 (później X3L2), a później przez podkomitet X3. 2.4 grupa robocza (obecnie INCITS ). ASA przekształciła się w Instytut Standardów Stanów Zjednoczonych Ameryki (USASI) i ostatecznie Amerykański Narodowy Instytut Standardów (ANSI).

Po wypełnieniu pozostałych znaków specjalnych i kodów kontrolnych, ASCII został opublikowany jako ASA X3.4-1963, pozostawiając 28 pozycji kodu bez przypisanego znaczenia, zarezerwowanych dla przyszłej standaryzacji i jeden nieprzypisany kod kontrolny. W tym czasie toczyła się debata, czy powinno być więcej znaków kontrolnych niż małych liter. Niezdecydowanie nie trwało długo: w maju 1963 roku Grupa Robocza CCITT ds. Nowego Alfabetu Telegraficznego zaproponowała przypisanie małych liter do patyczków 6 i 7, a Międzynarodowa Organizacja Normalizacyjna TC 97 SC 2 głosowała w październiku za włączeniem zmiany do projektu standardu . Grupa zadaniowa X3.2.4 przegłosowała zatwierdzenie zmiany na ASCII na spotkaniu w maju 1963 roku. Zlokalizowanie małych liter w patykach 6 i 7 spowodowało, że znaki różniły się wzorem bitowym od wielkich o jeden bit, co uprościło dopasowanie znaków bez uwzględniania wielkości liter oraz konstrukcję klawiatur i drukarek.

Komitet X3 wprowadził inne zmiany, w tym inne nowe znaki (znaki nawiasów klamrowych i pionowej kreski ), zmianę nazw niektórych znaków kontrolnych (SOM stał się początkiem nagłówka (SOH)) oraz przenoszenie lub usuwanie innych (RU zostało usunięte). ASCII został następnie zaktualizowany jako USAS X3.4-1967, następnie USAS X3.4-1968, ANSI X3.4-1977 i wreszcie ANSI X3.4-1986.

Wersje standardu ASCII:

  • ASA X3.4-1963
  • ASA X3.4-1965 (zatwierdzony, ale nieopublikowany, jednak używany przez IBM 2260 i 2265 Display Stations oraz IBM 2848 Display Control)
  • USA X3.4-1967
  • USA X3.4-1968
  • ANSI X3.4-1977
  • ANSI X3.4-1986
  • ANSI X3.4-1986 (R1992)
  • ANSI X3.4-1986 (R1997)
  • ANSI INCITS 4-1986 (R2002)
  • ANSI INCITS 4-1986 (R2007)
  • (ANSI) INCITS 4-1986 [R2012]
  • (ANSI) INCITS 4-1986[R2017]

W standardzie X3.15 komisja X3 zajęła się również tym, w jaki sposób powinien być przesyłany ASCII ( najpierw bit najmniej znaczący ) i jak powinien być nagrany na taśmie perforowanej. Zaproponowali 9-ścieżkowy standard dla taśmy magnetycznej i próbowali poradzić sobie z niektórymi formatami kart dziurkowanych .

Rozważania projektowe

Szerokość bitu

Podkomisja X3.2 zaprojektowała ASCII w oparciu o wcześniejsze systemy kodowania teledrukarek. Podobnie jak inne kodowania znaków , ASCII określa zgodność pomiędzy cyfrowymi wzorcami bitowymi a symbolami znaków (tj. grafemami i znakami sterującymi ). Pozwala to urządzeniom cyfrowym komunikować się ze sobą oraz przetwarzać, przechowywać i przekazywać informacje znakowe, takie jak język pisany. Przed opracowaniem ASCII stosowane kodowania obejmowały 26 znaków alfabetycznych , 10 cyfr i od 11 do 25 specjalnych symboli graficznych. Aby uwzględnić wszystkie te elementy oraz znaki kontrolne zgodne ze standardem Comité Consultatif International Téléphonique et Télégraphique (CCITT) International Telegraph Alphabet No. 2 (ITA2) z 1924 r., FIELDATA (1956) i wczesnym EBCDIC (1963), wprowadzono ponad 64 kody. wymagane dla ASCII.

ITA2 był z kolei oparty na 5-bitowym kodzie telegraficznym, który Émile Baudot wynalazł w 1870 roku i opatentował w 1874 roku.

Komisja debatowała nad możliwością funkcji przesunięcia (jak w ITA2 ), która pozwoliłaby na reprezentowanie ponad 64 kodów przez kod sześciobitowy . W przesuniętym kodzie niektóre kody znaków określają wybór między opcjami dla następujących kodów znaków. Pozwala na zwarte kodowanie, ale jest mniej niezawodne w transmisji danych , ponieważ błąd w przesyłaniu kodu zmiany zwykle powoduje, że długa część transmisji jest nieczytelna. Komitet normalizacyjny zdecydował się nie przesuwać, więc ASCII wymagał co najmniej siedmiobitowego kodu.

Komitet rozważał kod ośmiobitowy, ponieważ osiem bitów ( oktetów ) pozwoliłoby dwóm czterobitowym wzorom na efektywne kodowanie dwóch cyfr za pomocą dziesiętnego kodowanego binarnie . Jednak wymagałoby to wszystkich transmisji danych, aby wysłać osiem bitów, podczas gdy siedem może wystarczyć. Komitet przegłosował użycie siedmiobitowego kodu, aby zminimalizować koszty związane z transmisją danych. Ponieważ perforowana taśma w tym czasie mogła nagrywać osiem bitów w jednej pozycji, pozwalała również na bit parzystości do sprawdzania błędów, jeśli jest to pożądane. Maszyny ośmiobitowe (z oktetami jako natywnym typem danych), które nie używały sprawdzania parzystości, zwykle ustawiają ósmy bit na 0.

Wewnętrzna organizacja

Sam kod był wzorowany tak, że większość kodów kontrolnych była razem, a wszystkie kody graficzne były razem, w celu ułatwienia identyfikacji. Pierwsze dwa tak zwane drążki ASCII (32 pozycje) były zarezerwowane dla znaków sterujących. Znak „spacja” musiał być umieszczony przed grafiką, aby ułatwić sortowanie , więc stał się on pozycją 20 hex ; z tego samego powodu przed cyframi umieszczano wiele znaków specjalnych powszechnie stosowanych jako separatory. Komitet zdecydował, że ważne jest wspieranie 64-znakowych alfabetów pisanych wielkimi literami i wybrał wzorzec ASCII, aby można go było łatwo zredukować do użytecznego 64-znakowego zestawu kodów graficznych, jak to zrobiono w kodzie DEC SIXBIT (1963). Małe litery nie były zatem przeplatane wielkimi literami. Aby zachować dostępne opcje dla małych liter i innych grafik, specjalne i numeryczne kody zostały umieszczone przed literami, a litera A została umieszczona w pozycji 41 hex, aby dopasować projekt odpowiedniego brytyjskiego standardu. Cyfry 0–9 są poprzedzone cyframi 011, ale pozostałe 4 bity odpowiadają ich odpowiednim wartościom w formacie binarnym, dzięki czemu konwersja za pomocą dziesiętnego kodowanego binarnie jest prosta.

Wiele znaków niealfanumerycznych zostało umieszczonych zgodnie z ich przesuniętą pozycją na maszynach do pisania; ważną subtelnością jest to, że opierały się one na mechanicznych maszynach do pisania, a nie elektrycznych . Maszyny do pisania mechaniczne podążały za standardem wyznaczonym przez Remington nr 2 (1878), pierwszą maszynę do pisania z klawiszem shift, a przesuniętymi wartościami 23456789-były "#$%_&'() – wczesne maszyny do pisania pomijały 0 i 1 , używając O (duża litera o ) i l (małe litery L ), ale pary 1!i 0)stały się standardem, gdy 0 i 1 stały się powszechne. Tak więc w ASCII !"#$%umieszczono w drugim drążku pozycje 1–5, odpowiadające cyfrom 1–5 w sąsiednim drążku. Nawiasy nie mogły jednak odpowiadać 9 i 0 , ponieważ miejsce odpowiadające 0 zajmował znak spacji. Zostało to uwzględnione przez usunięcie _(podkreślenie) z 6 i przesunięcie pozostałych znaków, co odpowiadało wielu europejskim maszynom do pisania, które umieszczały w nawiasach 8 i 9 . Ta rozbieżność w stosunku do maszyn do pisania doprowadziła do powstania klawiatur ze sparowanymi bitami , zwłaszcza Teletype Model 33 , który używał układu z przesunięciem w lewo, odpowiadającego ASCII, a nie tradycyjnych mechanicznych maszyn do pisania. Elektryczne maszyny do pisania, zwłaszcza IBM Selectric (1961), wykorzystywały nieco inny układ, który stał się standardem na komputerach – po IBM PC (1981), zwłaszcza Model M (1984) – a zatem wartości przesunięcia dla symboli na nowoczesnych klawiaturach nie odpowiadają tak blisko tablicy ASCII jak wcześniejsze klawiatury. /?Para również terminy do nr 2, a ,< .>pary były używane na niektórych klawiaturach (inne, w tym nr 2, nie przesuwają ,(przecinek) lub .(kropka), więc mogą być używane wielkimi literami bez unshifting). Jednak ASCII podzielił ;:parę (datuje na nr 2) i przeorganizował symbole matematyczne (zróżnicowane konwencje, zwykle -* =+) na :* ;+ -=.

Niektóre typowe znaki nie zostały uwzględnione, w szczególności ½¼¢, podczas gdy ^`~zostały uwzględnione jako znaki diakrytyczne do użytku międzynarodowego i <>do użytku matematycznego, wraz z prostymi znakami linii \|(oprócz common /). @ Symbol nie był używany w Europie kontynentalnej i komisja oczekuje, że będzie zastąpiony przez akcentowanym À we francuskim zmienności, więc @ został umieszczony w pozycji 40 hex , tuż przed literą A.

Kody kontrolne uważane za istotne dla transmisji danych to początek wiadomości (SOM), koniec adresu (EOA), koniec wiadomości (EOM), koniec transmisji (EOT), „kim jesteś?” (WRU), "czy jesteś?" (RU), zarezerwowane sterowanie urządzeniem (DC0), synchroniczna bezczynność (SYNC) i potwierdzenie (ACK). Zostały one ustawione tak, aby zmaksymalizować odległość Hamminga między ich wzorami bitów.

Kolejność znaków

Kolejność kodu ASCII jest również nazywana porządkiem ASCIIbetical . Sortowanie danych jest czasami wykonywane w tej kolejności, a nie w „standardowej” kolejności alfabetycznej ( kolejność zestawiania ). Główne odchylenia w kolejności ASCII to:

  • Wszystkie wielkie litery poprzedzają małe litery; na przykład „Z” poprzedza „a”
  • Cyfry i wiele znaków interpunkcyjnych występuje przed literami

Pośredni porządek konwertuje wielkie litery na małe przed porównaniem wartości ASCII.

Grupy postaci

Postacie kontrolne

ASCII rezerwuje pierwsze 32 kody (liczby od 0 do 31 dziesiętnie) dla znaków kontrolnych : kody pierwotnie przeznaczone nie do reprezentowania informacji drukowalnych, ale raczej do sterowania urządzeniami (takimi jak drukarki ) korzystające z ASCII lub do dostarczania meta-informacji o danych strumienie, takie jak te przechowywane na taśmie magnetycznej.

Na przykład znak 10 reprezentuje funkcję „wysuwu wiersza” (która powoduje, że drukarka przesuwa papier), a znak 8 oznacza „cofnięcie”. RFC  2822 odnosi się do znaków sterujących, które nie zawierają powrotu karetki, nowego wiersza ani białych znaków, jako znaków sterujących innych niż białe znaki. Z wyjątkiem znaków sterujących, które zalecają elementarne formatowanie zorientowane liniowo, ASCII nie definiuje żadnego mechanizmu opisu struktury lub wyglądu tekstu w dokumencie. Inne schematy, takie jak języki znaczników , strona adresowa oraz układ i formatowanie dokumentu.

Oryginalny standard ASCII używał tylko krótkich opisowych fraz dla każdego znaku kontrolnego. Wywołana przez to niejednoznaczność była czasami celowa, na przykład, gdy znak zostałby użyty nieco inaczej w łączu terminalowym niż w strumieniu danych , a czasami przypadkowa, na przykład w znaczeniu „usuń”.

Prawdopodobnie najbardziej wpływowym pojedynczym urządzeniem na interpretację tych znaków był Teletype Model 33 ASR, który był terminalem drukującym z dostępną opcją czytnika/dziurkacza taśmy papierowej . Do lat 80. taśma papierowa była bardzo popularnym nośnikiem długoterminowego przechowywania programów, tańszym i pod pewnymi względami mniej kruchym niż taśma magnetyczna. W szczególności, przypisania maszyny Teletype Model 33 dla kodów 17 (Control-Q, DC1, znany również jako XON), 19 (Control-S, DC3, znany również jako XOFF) i 127 ( Delete ) stały się de facto standardami. Model 33 wyróżniał się również tym, że dosłownie brał opis Control-G (kod 7, BEL, co oznacza słyszalne ostrzeganie operatora), ponieważ urządzenie zawierało rzeczywisty dzwonek, który dzwonił, gdy otrzymał znak BEL. Ponieważ klawisz klawisza O również pokazywał symbol strzałki w lewo (z ASCII-1963, który miał ten znak zamiast podkreślenia ), niezgodne użycie kodu 15 (Control-O, Shift In) interpretowane jako „usuń poprzedni znak” został również przyjęty przez wiele wczesnych systemów współdzielenia czasu, ale ostatecznie został zaniedbany.

Gdy Teletype 33 ASR wyposażony w automatyczny czytnik taśmy papierowej otrzymał Control-S (XOFF, skrót oznaczający wyłączenie transmisji), spowodowało zatrzymanie czytnika taśmy; odbieranie Control-Q (XON, "transmisja włączona") spowodowało wznowienie działania czytnika taśm. Ta technika została przyjęta przez kilka wczesnych komputerowych systemów operacyjnych jako sygnał „uzgadniania” ostrzegający nadawcę, aby przerwał transmisję z powodu zbliżającego się przepełnienia; utrzymuje się do dziś w wielu systemach jako technika ręcznego sterowania wyjściem. W niektórych systemach Control-S zachowuje swoje znaczenie, ale Control-Q jest zastępowany przez drugi Control-S, aby wznowić produkcję. 33 ASR można również skonfigurować tak, aby wykorzystywał Control-R (DC2) i Control-T (DC4) do uruchamiania i zatrzymywania dziurkacza taśmy; w niektórych jednostkach wyposażonych w tę funkcję, odpowiednie litery znaku kontrolnego na klawiszu nad literą to odpowiednio TAPE i TAPE .

Usuń i Backspace

Teletype nie mógł cofnąć głowy, więc nie umieścił klawisza na klawiaturze, aby wysłać BS (backspace). Zamiast tego był oznaczony klucz, RUB OUTktóry wysyłał kod 127 (DEL). Celem tego klawisza było usunięcie błędów w ręcznie pisanej taśmie papierowej: operator musiał nacisnąć przycisk na dziurkaczu taśmy, aby go cofnąć, a następnie wpisać rubout, który przebił wszystkie dziury i zastąpił błąd znakiem, który miał być ignorowany. Teletypy były powszechnie używane w tańszych komputerach firmy Digital Equipment Corporation , więc systemy te musiały używać dostępnego klucza, a tym samym kodu DEL, aby usunąć poprzedni znak. Z tego powodu terminale wideo DEC (domyślnie) wysłały kod DEL dla klawisza oznaczonego „Backspace”, podczas gdy klawisz oznaczony „Delete” wysłał sekwencję ucieczki, podczas gdy wiele innych terminali wysłało BS dla klawisza Backspace. Sterownik terminala uniksowego mógł używać tylko jednego kodu do kasowania poprzedniego znaku, można to ustawić na BS lub DEL, ale nie na oba, co powodowało długi okres irytacji, w którym użytkownicy musieli to poprawiać w zależności od używanego terminala (powłoki które umożliwiają edycję wierszy, takie jak ksh , bash i zsh , rozumieją oba). Założenie, że żaden klawisz nie wysłał BS spowodowało, że Control+H zostało użyte do innych celów, takich jak polecenie prefiksu „pomoc” w GNU Emacs .

Ucieczka

Znacznie większej liczbie kodów sterujących nadano znaczenia zupełnie inne od ich pierwotnych. Na przykład znak „escape” (ESC, kod 27) pierwotnie miał umożliwiać wysyłanie innych znaków kontrolnych jako literałów zamiast wywoływania ich znaczenia. Jest to to samo znaczenie „ucieczki” występujące w kodowaniach adresów URL, ciągach języka C i innych systemach, w których niektóre znaki mają zastrzeżone znaczenie. Z biegiem czasu to znaczenie zostało dokooptowane i ostatecznie uległo zmianie. We współczesnym użyciu, ESC wysyłane do terminala zwykle wskazuje początek sekwencji poleceń, zwykle w postaci tak zwanego „ kodu ucieczki ANSI ” (lub, bardziej właściwie, „ wprowadzającego sekwencję sterowania ”) z ECMA-48 ( 1972) i jego następców, zaczynając od ESC, po którym następuje znak „[” (lewy nawias). ESC wysłany z terminala jest najczęściej używany jako znak pozapasmowy używany do zakończenia operacji, tak jak w edytorach tekstu TECO i vi . W graficznym interfejsie użytkownika (GUI) i systemach okienkowych ESC zazwyczaj powoduje przerwanie bieżącej operacji aplikacji lub całkowite jej zamknięcie (zakończenie).

Koniec linii

Nieodłączna niejednoznaczność wielu znaków kontrolnych, w połączeniu z ich historycznym wykorzystaniem, stworzyły problemy podczas przesyłania plików „zwykłego tekstu” między systemami. Najlepszym tego przykładem jest problem nowej linii w różnych systemach operacyjnych . Maszyny dalekopisowe wymagały, aby wiersz tekstu był zakończony zarówno „Powrotem karetki” (co przesuwa głowicę drukującą na początek wiersza), jak i „Wysuwem wiersza” (co przesuwa papier o jeden wiersz bez przesuwania głowicy drukującej). Nazwa „Powrót karetki” wzięła się stąd, że na ręcznej maszynie do pisania karetka trzymająca papier poruszała się, podczas gdy pozycja, w której paski uderzały o wstęgę, pozostawała nieruchoma. Całą karetkę trzeba było przesunąć (zwrócić) w prawo, aby ustawić lewy margines papieru dla następnej linii.

Systemy operacyjne DEC ( OS/8 , RT-11 , RSX-11 , RSTS , TOPS-10 , itp.) używały obu znaków do oznaczenia końca linii, aby urządzenie konsoli (pierwotnie maszyny Teletype ) mogło działać. Zanim pojawiły się tak zwane „szklane TTY” (później nazywane CRT lub terminalami), konwencja była tak dobrze ugruntowana, że ​​kompatybilność wsteczna wymagała kontynuowania konwencji. Kiedy Gary Kildall stworzony CP / M był inspirowany przez niektórych konwencji interfejs wiersza poleceń użytych w grudniu „s RT-11 . Do czasu wprowadzenia PC DOS w 1981 r. firma IBM nie miała w tym żadnej ręki, ponieważ ich systemy operacyjne z lat 70. używały EBCDIC zamiast ASCII i były zorientowane na wejście kart perforowanych i wydruki linii, na których koncepcja powrotu karetki była bez znaczenia. PC DOS IBM (sprzedawany również jako MS-DOS przez Microsoft) odziedziczył tę konwencję, ponieważ był luźno oparty na CP/M, a Windows odziedziczył ją po MS-DOS.

Niestety, wymaganie dwóch znaków do oznaczenia końca wiersza wprowadza niepotrzebną komplikację i pytania, jak interpretować każdy znak, gdy napotkasz go samotnie. Aby uprościć sprawy, strumienie danych w postaci zwykłego tekstu , w tym pliki, w Multics używał samego wysuwu wiersza (LF) jako zakończenia wiersza. Unix i uniksowych systemów i amigowych systemów, przyjęła tę konwencję z Multics. Z drugiej strony oryginalne systemy Macintosh OS , Apple DOS i ProDOS używały samego powrotu karetki (CR) jako terminatora linii; jednak odkąd Apple zastąpił te systemy operacyjne systemem operacyjnym macOS opartym na systemie Unix , teraz używają również wysuwu wiersza (LF). Radio Shack TRS-80 również używał samotnego CR do zakańczania linii.

Komputery podłączone do ARPANETu obejmowały maszyny z systemami operacyjnymi takimi jak TOPS-10 i TENEX z zakończeniami linii CR-LF, maszyny z systemami operacyjnymi takimi jak Multics z zakończeniami linii LF oraz maszyny z systemami operacyjnymi takimi jak OS/360 reprezentujące linie liczba znaków, po której następują znaki wiersza i która używa EBCDIC zamiast ASCII. Telnet protokół zdefiniowany ASCII „ Sieć wirtualna Terminal ” (NVT), tak, że połączenia pomiędzy hostami z różnymi konwencjami kończący linię zestawów znaków i może być obsługiwany przez transmitowanie standardowy format tekstu w sieci. Telnet używał ASCII wraz z zakończeniami linii CR-LF, a oprogramowanie używające innych konwencji tłumaczyłoby między konwencjami lokalnymi i NVT. File Transfer Protocol przyjęła protokół Telnet, w tym korzystania z sieci terminal wirtualny, do stosowania przy przekazywaniu poleceń i przesyłania danych w domyślnym trybie ASCII. Zwiększa to złożoność implementacji tych protokołów, a także innych protokołów sieciowych, takich jak te używane do obsługi poczty e-mail i sieci WWW, w systemach nie korzystających z konwencji NVT CR-LF.

Koniec pliku/strumienia

Monitor PDP-6 i jego następca PDP-10 TOPS-10 wykorzystywały Control-Z (SUB) jako wskazanie końca pliku dla danych wejściowych z terminala. Niektóre systemy operacyjne, takie jak CP/M, śledziły długość pliku tylko w jednostkach bloków dyskowych i używały Control-Z do oznaczania końca rzeczywistego tekstu w pliku. Z tych powodów EOF lub end-of-file , był używany potocznie i konwencjonalnie jako trzyliterowy akronim Control-Z zamiast SUBstitute. Kod końca tekstu ( ETX ), znany również jako Control-C , był nieodpowiedni z różnych powodów, podczas gdy użycie Z jako kodu kontrolnego do zakończenia pliku jest analogiczne do zakończenia alfabetu i służy jako bardzo wygodne pomoc mnemoniczna . Historycznie powszechna i nadal rozpowszechniona konwencja wykorzystuje konwencję kodu ETX do przerywania i zatrzymywania programu poprzez strumień danych wejściowych, zwykle z klawiatury.

W bibliotekach C i konwencjach uniksowych znak null jest używany do zakończenia ciągów tekstowych ; takie zakończone znakiem NUL łańcuchy mogą być znane w skrócie jako ASCIZ lub ASCIIZ, gdzie Z oznacza „zero”.

Karta kodów kontrolnych

Dwójkowy Październik Grudzień Klątwa Skrót Imię (1967)
1963 1965 1967
000 0000 000 0 00 ZERO NUL ^@ \0 Zero
000 0001 001 1 01 SOM SOH ^A Początek nagłówka
000 0010 002 2 02 EOA STX ^B Początek tekstu
000 0011 003 3 03 EOM ETX ^C Koniec tekstu
000 0100 004 4 04 EOT ^D Koniec transmisji
000 0101 005 5 05 WRU ENQ ^E Zapytanie
000 0110 006 6 06 RU POTWIERDZ ^F Potwierdzenie
000 0111 007 7 07 DZWON BEL ^G \a dzwon
000 1000 010 8 08 FE0 BS ^H \b Backspace
000 1001 011 9 09 HT/SK HT ^I \T Zakładka pozioma
000 1010 012 10 0A LF ^J \n Podawanie linii
000 1011 013 11 0B VTAB VT ^K \v Zakładka pionowa
000 1100 014 12 0C FF ^L \F Kanał formularza
000 1101 015 13 0D CR ^M \r Zwrot karetki
000 1110 016 14 0E WIĘC ^N Przesuń się
000 1111 017 15 0F SI ^O Przesunięcie w
001 0000 020 16 10 DC0 DLE ^P Ucieczka łącza danych
001 0001 021 17 11 DC1 ^P Kontrola urządzenia 1 (często XON )
001 0010 022 18 12 DC2 ^R Kontrola urządzenia 2
001 0011 023 19 13 DC3 ^S Kontrola urządzenia 3 (często XOFF )
001 0100 024 20 14 DC4 ^T Kontrola urządzenia 4
001 0101 025 21 15 BŁĄDZIĆ NAK ^U Negatywne potwierdzenie
001 0110 026 22 16 SYNCHRONIZACJA SYN ^V Synchroniczny bezczynność
001 0111 027 23 17 LEM ETB ^W Koniec bloku transmisji
001 1000 030 24 18 S0 MÓC ^X Anulować
001 1001 031 25 19 S1 EM ^Y Koniec medium
001 1010 032 26 1A S2 SS POD ^Z Zastąpić
001 1011 033 27 1B S3 WYJŚCIE ^[ \mi Ucieczka
001 1100 034 28 1C S4 FS ^\ Separator plików
001 1101 035 29 1D S5 GS ^] Separator grupowy
001 1110 036 30 1E S6 RS ^^ Separator rekordów
001 1111 037 31 1F S7 nas ^_ Separator jednostek
111 1111 177 127 7F DEL ^? Kasować

Inne reprezentacje mogą być używane przez specjalistyczny sprzęt, na przykład grafika ISO 2047 lub liczby szesnastkowe .

Znaki do druku

Kody 20 hex do 7E hex , znane jako znaki drukowane, reprezentują litery, cyfry, znaki interpunkcyjne i kilka różnych symboli. Łącznie można wydrukować 95 znaków.

Kod 20 hex , znak „spacji” , oznacza spację między słowami, wytworzoną przez spację na klawiaturze. Ponieważ znak spacji jest uważany za niewidoczną grafikę (a nie znak kontrolny), jest wymieniony w poniższej tabeli zamiast w poprzedniej sekcji.

Szesnastkowy kod 7F odpowiada niedrukowalnemu znakowi kontrolnemu „usuń” (DEL) i dlatego został pominięty w tym wykresie; omówiono go w tabeli z poprzedniej sekcji. Wcześniejsze wersje ASCII używały strzałki w górę zamiast karetki (5E hex ) i lewej strzałki zamiast podkreślenia (5F hex ).

Dwójkowy Październik Grudzień Klątwa Glif
1963 1965 1967
010 0000 040 32 20  przestrzeń
010 0001 041 33 21 !
010 0010 042 34 22 "
010 0011 043 35 23 #
010 0100 044 36 24 $
010 0101 045 37 25 %
010 0110 046 38 26 &
010 0111 047 39 27 '
010 1000 050 40 28 (
010 1001 051 41 29 )
010 1010 052 42 2A *
010 1011 053 43 2B +
010 1100 054 44 2C ,
010 1101 055 45 2D -
010 1110 056 46 2E .
010 1111 057 47 2F /
011 0000 060 48 30 0
011 0001 061 49 31 1
011 0010 062 50 32 2
011 0011 063 51 33 3
011 0100 064 52 34 4
011 0101 065 53 35 5
011 0110 066 54 36 6
011 0111 067 55 37 7
011 1000 070 56 38 8
011 1001 071 57 39 9
011 1010 072 58 3A :
011 1011 073 59 3B ;
011 1100 074 60 3C <
011 1101 075 61 3D =
011 1110 076 62 3E >
011 1111 077 63 3F ?
100 0000 100 64 40 @ ` @
100 0001 101 65 41 A
100 0010 102 66 42 b
100 0011 103 67 43 C
100 0100 104 68 44 D
100 0101 105 69 45 mi
100 0110 106 70 46 F
100 0111 107 71 47 g
100 1000 110 72 48 h
100 1001 111 73 49 i
100 1010 112 74 4A J
100 1011 113 75 4B K
100 1100 114 76 4C L
100 1101 115 77 4D m
100 1110 116 78 4E n
100 1111 117 79 4F O
101 0000 120 80 50 P
101 0001 121 81 51 Q
101 0010 122 82 52 r
101 0011 123 83 53 S
101 0100 124 84 54 T
101 0101 125 85 55 U
101 0110 126 86 56 V
101 0111 127 87 57 W
101 1000 130 88 58 x
101 1001 131 89 59 Tak
101 1010 132 90 5A Z
101 1011 133 91 5B [
101 1100 134 92 5C \ ~ \
101 1101 135 93 5D ]
101 1110 136 94 5E ^
101 1111 137 95 5F _
110 0000 140 96 60 @ `
110 0001 141 97 61 a
110 0010 142 98 62 b
110 0011 143 99 63 C
110 0100 144 100 64 D
110 0101 145 101 65 mi
110 0110 146 102 66 F
110 0111 147 103 67 g
110 1000 150 104 68 h
110 1001 151 105 69 i
110 1010 152 106 6A J
110 1011 153 107 6B k
110 1100 154 108 6C ja
110 1101 155 109 6D m
110 1110 156 110 6E n
110 1111 157 111 6F o
111 0000 160 112 70 P
111 0001 161 113 71 Q
111 0010 162 114 72 r
111 0011 163 115 73 s
111 0100 164 116 74 T
111 0101 165 117 75 ty
111 0110 166 118 76 v
111 0111 167 119 77 w
111 1000 170 120 78 x
111 1001 171 121 79 tak
111 1010 172 122 7A z
111 1011 173 123 7B {
111 1100 174 124 7C POTWIERDZ ¬ |
111 1101 175 125 7D }
111 1110 176 126 7E WYJŚCIE | ~

Zestaw znaków

Punkty, które reprezentowały inny charakter w poprzednich wersjach (wersja z 1963 r. lub szkic z 1965 r.) są pokazane w ramkach. Punkty przypisane od wersji z 1963, ale poza tym niezmienione, są lekko zacienione w stosunku do kolorów legendy.

ASCII (1977/1986)
_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _MI _F
0_
0
NUL
0000
SOH
0001
STX
0002
ETX
0003
EOT
0004
ENQ
0005
ACK
0006
BEL
0007
BS
0008
HT
0009
LF
000A
VT
000B
FF
000C
CR
000D
SO
000E
SI
000F
1_
16
DLE
0010
DC1
0011
DC2
0012
DC3
0013
DC4
0014
NAK
0015
SYN
0016
ETB
0017
MOŻE
0018
EM
0019
SUB
001A
ESC
001B
FS
001C
GS
001D
RS
001E
USA
001F
2_
32
SP
0020
!
0021

0022
#
0023
0024
%
0025
&
0026
'
0027
(
0028
)
0029
*
002A
+
002B
,
002C
-
002D
.
002E
/
002F
3_
48
0
0030
1
0031
2
0032
3
0033
4
0034
5
0035
6
0036
7
0037
8
0038
9
0039
:
003A
;
003B
<
003C
=
003D
>
003E
?
003F
4_
64
@
0040

0041
B
0042
C
0043
D
0044
E
0045
F
0046
G
0047
H
0048
I
0049
J
004A
K
004B
L
004C
M
004D
N
004E
O
004F
5_
80
P
0050
P
0051
R
0052
S
0053
T
0054
U
0055
V
0056
W
0057
X
0058
Tak
0059
Z
005A
[
005B
\
005C
]
005D
^
005E
_
005F
6_
96
`
0060

0061
b
0062
c
0063
d
0064
e
0065
f
0066
g
0067
h
0068
I
0069
j
006A
k
006B
L
006C
m
006D
n
006E
o
006F
7_
112
p
0070
q
0071
R
0072
s
0073
t
0.074
U
0075
v
0076
w
0077
x
0078
y
0079
z
007A
{
007B
|
007C
}
007D
~
007E
DEL
007F

  List  Numer  Interpunkcja  Symbol  Inne  Nieokreślony  Zmieniono postać z wersji z 1963 r. lub szkicu z 1965 r.

Posługiwać się

ASCII został po raz pierwszy użyty komercyjnie w 1963 roku jako siedmiobitowy kod dalekopisu dla sieci TWX (TeletypeWriter eXchange) firmy American Telephone & Telegraph . TWX pierwotnie używał wcześniejszego pięciobitowego ITA2 , który był również używany przez konkurencyjny system teledrukarek Telex . Bob Bemer wprowadził takie funkcje, jak sekwencja ucieczki . Jego brytyjski kolega Hugh McGregor Ross przyczynił się do spopularyzowania tej pracy – według Bemera „do tego stopnia, że ​​kod, który miał stać się ASCII, został po raz pierwszy nazwany w Europie kodem Bemer–Ross ”. Ze względu na intensywną pracę nad ASCII Bemer został nazwany „ojcem ASCII”.

11 marca 1968 r. prezydent USA Lyndon B. Johnson nakazał, aby wszystkie komputery zakupione przez rząd federalny Stanów Zjednoczonych obsługiwały ASCII, stwierdzając:

Zatwierdziłem również zalecenia Sekretarza Handlu [ Luthera H. Hodgesa ] dotyczące standardów zapisywania Standardowego Kodeksu Wymiany Informacji na taśmach magnetycznych i papierowych, gdy są one używane w operacjach komputerowych. Wszystkie komputery i związane z nimi konfiguracje sprzętu wprowadzone do inwentarza rządu federalnego w dniu 1 lipca 1969 r. i po tej dacie muszą mieć możliwość używania standardowego kodu wymiany informacji oraz formatów wymaganych przez standardy dotyczące taśm magnetycznych i papierowych, gdy te nośniki są używane.

ASCII było najpopularniejszym kodowaniem znaków w sieci WWW do grudnia 2007 r., kiedy to kodowanie UTF-8 go wyprzedziło; UTF-8 jest wstecznie kompatybilny z ASCII.

Warianty i pochodne

W miarę rozpowszechniania się technologii komputerowej na całym świecie różne organy normalizacyjne i korporacje opracowały wiele odmian ASCII, aby ułatwić wyrażanie w językach innych niż angielski, które używają alfabetów rzymskich. Można zaklasyfikować niektóre z tych odmian jako „ rozszerzenia ASCII ”, chociaż niektórzy nadużywają tego terminu do reprezentowania wszystkich wariantów, łącznie z tymi, które nie zachowują mapy znaków ASCII w zakresie 7-bitowym. Ponadto rozszerzenia ASCII zostały również błędnie oznaczone jako ASCII.

7-bitowe kody

Od samego początku jego rozwoju, ASCII miał być tylko jednym z kilku narodowych wariantów międzynarodowego standardu kodu znaków.

Inne międzynarodowe organy normalizacyjne ratyfikowały kodowanie znaków, takie jak ISO 646 (1967), które są identyczne lub prawie identyczne z ASCII, z rozszerzeniami dla znaków spoza alfabetu angielskiego i symboli używanych poza Stanami Zjednoczonymi, takich jak symbol brytyjskiego funta szterlinga (Ł). Prawie każdy kraj potrzebował dostosowanej wersji ASCII, ponieważ ASCII odpowiadał potrzebom tylko Stanów Zjednoczonych i kilku innych krajów. Na przykład Kanada miała własną wersję, która obsługiwała francuskie znaki.

Wiele innych krajów opracowało warianty ASCII zawierające litery inne niż angielskie (np. é , ñ , ß , Ł ), symbole walut (np. £ , ¥ ) itd. Zobacz także YUSCII (Jugosławia).

Większość znaków miałaby wspólnego, ale przypisywałaby inne lokalnie użyteczne znaki do kilku punktów kodowych zarezerwowanych do „użycia krajowego”. Jednak cztery lata, które upłynęły między publikacją ASCII-1963 a pierwszą akceptacją międzynarodowej rekomendacji przez ISO w 1967 roku, spowodowały, że wybory ASCII dotyczące znaków narodowych wydawały się być de facto standardami dla świata, powodując zamieszanie i niezgodność, gdy inne kraje zaczęli tworzyć własne przypisania do tych punktów kodowych.

ISO/IEC 646, podobnie jak ASCII, to 7-bitowy zestaw znaków. Nie udostępnia żadnych dodatkowych kodów, więc te same punkty kodowe kodują różne znaki w różnych krajach. Kody ewakuacyjne zostały zdefiniowane, aby wskazać, który wariant narodowy dotyczy fragmentu tekstu, ale były one rzadko używane, więc często nie można było wiedzieć, z jakim wariantem pracować, a zatem, jaki znak reprezentuje kod, i ogólnie, tekst- systemy przetwarzania i tak poradziły sobie tylko z jednym wariantem.

Ponieważ znaki nawiasów klamrowych i nawiasów klamrowych ASCII zostały przypisane do punktów kodowych „zastosowania krajowego”, które były używane do liter akcentowanych w innych krajowych wariantach ISO/IEC 646, programista niemiecki, francuski, szwedzki itp. używający ich narodowej wersji ISO /IEC 646, zamiast ASCII, musiał pisać, a zatem czytać, coś takiego jak

ä aÄiÜ = 'Ön'; ü

zamiast

{ a[i] = '\n'; }

Trigrafy C zostały stworzone, aby rozwiązać ten problem dla ANSI C , chociaż ich późne wprowadzenie i niespójna implementacja w kompilatorach ograniczyły ich użycie. Wielu programistów trzymało swoje komputery na US-ASCII, więc zwykły tekst w języku szwedzkim, niemieckim itp. (na przykład w e-mailu lub Usenecie ) zawierał „{, }” i podobne warianty w środku słów, coś, co ci programiści otrzymali wykorzystywany do. Na przykład, szwedzki programista wysyłający e-mail do innego programisty z pytaniem, czy powinien iść na lunch, może otrzymać "N{ jag har sm|rg}sar" jako odpowiedź, która powinna brzmieć "Nä jag har smörgåsar", co oznacza "Nie, mam kanapki".

W Japonii i Korei, jeszcze od lat 2020, używana jest odmiana ASCII, w której ukośnik odwrotny (szesnastkowy 5C) jest renderowany jako ¥ ( znak jena , w Japonii) lub ₩ ( znak wygranej , w Korei). Oznacza to, że na przykład ścieżka pliku C:\Users\Smith jest pokazana jako C:¥Users¥Smith (w Japonii) lub C:₩Users₩Smith (w Korei).

8-bitowe kody

Ostatecznie, gdy komputery 8-, 16- i 32-bitowe (a później 64-bitowe ) zaczęły zastępować komputery 12- , 18- i 36-bitowe jako norma, powszechne stało się używanie 8-bitowych bajtów do przechowywania każdego znak w pamięci, dając możliwość rozszerzonym, 8-bitowym krewnym ASCII. W większości przypadków rozwinęły się one jako prawdziwe rozszerzenia ASCII, pozostawiając oryginalne odwzorowanie znaków nienaruszone, ale dodając dodatkowe definicje znaków po pierwszych 128 (tj. 7-bitowych) znakach.

Kodowanie obejmuje ISCII (Indie), VISCII (Wietnam). Chociaż te kodowania są czasami określane jako ASCII, prawdziwy ASCII jest ściśle określony tylko przez standard ANSI.

Większość wczesnych domowych systemów komputerowych opracowała własne 8-bitowe zestawy znaków zawierające glify do rysowania linii i gier, często wypełniając niektóre lub wszystkie znaki kontrolne od 0 do 31 większą ilością grafiki. Komputery Kaypro CP/M używały „górnych” 128 znaków alfabetu greckiego.

PETSCII kod Commodore International wykorzystywane do ich 8-bitowych systemów jest prawdopodobnie wyjątkowa wśród kodów pocztowych w 1970 jest oparty na kodzie ASCII-1963, zamiast bardziej powszechne ASCII-1967, tak jak ustalono w ZX Spectrum komputerze. Komputery Atari 8-bitowe i komputery Galaksija również używały wariantów ASCII.

IBM PC zdefiniował stronę kodową 437 , która zastąpiła znaki kontrolne symbolami graficznymi, takimi jak uśmiechnięte buźki i przyporządkowała dodatkowe znaki graficzne do górnych 128 pozycji. Systemy operacyjne, takie jak DOS, obsługiwały te strony kodowe, a producenci komputerów IBM PC obsługiwali je sprzętowo. Digital Equipment Corporation opracowała Wielonarodowego zestawu znaków (DEC-MCS) do stosowania w popularnej VT220 terminalu jako jeden z pierwszych rozszerzeń przeznaczonych dla języków międzynarodowych bardziej niż na ilustracjach blokowych. Macintosh zdefiniował Mac OS Roman, a Postscript również zdefiniował zestaw, oba zawierały zarówno litery międzynarodowe, jak i typograficzne znaki interpunkcyjne zamiast grafiki, bardziej jak współczesne zestawy znaków.

8859 ISO / IEC standardowy (pochodzący z dec-MCS) ostatecznie ze standardu, że większość systemów kopiowane (co najmniej tak dokładnie, jak to skopiowane ASCII, ale wiele podstawień). Popularne dalsze rozszerzenie zaprojektowane przez Microsoft, Windows-1252 (często błędnie oznaczone jako ISO-8859-1 ), dodało typograficzne znaki interpunkcyjne potrzebne do tradycyjnego drukowania tekstu. ISO-8859-1, Windows-1252 i oryginalny 7-bitowy ASCII były najczęstszymi kodowaniami znaków do 2008 roku, kiedy UTF-8 stał się bardziej powszechny.

ISO/IEC 4873 wprowadził 32 dodatkowe kody kontrolne zdefiniowane w zakresie szesnastkowym 80-9F , w ramach rozszerzenia 7-bitowego kodowania ASCII na system 8-bitowy.

Unicode

Unicode i ISO/IEC 10646 Universal Character Set (UCS) mają znacznie szerszy zakres znaków, a ich różne formy kodowania zaczęły szybko wypierać ISO/IEC 8859 i ASCII w wielu środowiskach. Podczas gdy ASCII jest ograniczone do 128 znaków, Unicode i UCS obsługują więcej znaków, oddzielając koncepcje unikalnej identyfikacji (przy użyciu liczb naturalnych zwanych punktami kodowymi ) i kodowania (do 8-, 16- lub 32-bitowych formatów binarnych, zwanych UTF-8 , UTF-16 i UTF-32 ).

ASCII zostało włączone do zestawu znaków Unicode (1991) jako pierwsze 128 symboli, więc 7-bitowe znaki ASCII mają te same kody numeryczne w obu zestawach. Dzięki temu UTF-8 może być wstecznie kompatybilny z 7-bitowym ASCII, ponieważ plik UTF-8 zawierający tylko znaki ASCII jest identyczny z plikiem ASCII zawierającym tę samą sekwencję znaków. Co ważniejsze, kompatybilność w przód jest zapewniona jako oprogramowanie, które rozpoznaje tylko 7-bitowe znaki ASCII jako specjalne i nie zmienia bajtów z najwyższym ustawionym bitem (co często ma miejsce w przypadku obsługi 8-bitowych rozszerzeń ASCII, takich jak ISO-8859-1) zachowa dane UTF-8 bez zmian.

Zobacz też

Uwagi

Bibliografia

Dalsza lektura

Zewnętrzne linki