ASCII był rzeczywiście pierwotnie pomyślany jako kod 7-bitowy. Zrobiono to na długo zanim 8-bitowe bajty stały się wszechobecne, a nawet w latach 90. można było znaleźć oprogramowanie, które zakładało, że może używać 8. bitu każdego bajtu tekstu do własnych celów („nie czyste 8-bitowe”). W dzisiejszych czasach ludzie myślą o tym jako o 8-bitowym kodowaniu, w którym bajty od 0x80 do 0xFF nie mają zdefiniowanego znaczenia, ale to jest retcon .
Istnieją dziesiątki kodowań tekstu korzystających z ósmego bitu; można je sklasyfikować jako zgodne lub niekompatybilne z ASCII oraz o stałej lub zmiennej szerokości. Zgodność z ASCII oznacza, że niezależnie od kontekstu pojedyncze bajty o wartościach od 0x00 do 0x7F kodują te same znaki, które byłyby w ASCII. Nie chcesz mieć nic wspólnego z kodowaniem tekstu niezgodnym z ASCII, jeśli możesz tego uniknąć; naiwne programy oczekujące ASCII mają tendencję do błędnej interpretacji ich w katastrofalny, często łamiący zabezpieczenia sposób. Obecnie są tak przestarzałe, że (na przykład) HTML5 zabrania ich używania w sieci publicznej, z niefortunnym wyjątkiem UTF-16 . Nie będę więcej o nich mówić.
Kodowanie o stałej szerokości oznacza, jak to brzmi: wszystkie znaki są kodowane przy użyciu tej samej liczby bajtów. Aby było zgodne z ASCII, kodowanie ze stałym ustawieniem musi kodować wszystkie swoje znaki przy użyciu tylko jednego bajtu, więc nie może mieć więcej niż 256 znaków. Najpopularniejszym obecnie takim kodowaniem jest Windows-1252 , rozszerzenie ISO 8859-1 .
Obecnie jest tylko jedno kodowanie zgodne z ASCII o zmiennej szerokości, o którym warto wiedzieć, ale jest to bardzo ważne: UTF-8 , które pakuje cały kod Unicode do kodowania zgodnego z ASCII. Naprawdę chcesz tego używać, jeśli możesz nim zarządzać.
Na koniec, "ASCII" obecnie bierze swoją praktyczną definicję z Unicode, a nie z oryginalnego standardu (ANSI X3.4-1968), ponieważ historycznie istniało kilkadziesiąt odmian repertuaru ASCII 127-znakowego - na przykład niektóre z interpunkcję można zastąpić literami akcentowanymi, aby ułatwić przesyłanie tekstu francuskiego. Obecnie wszystkie te odmiany są przestarzałe, a kiedy ludzie mówią „ASCII”, mają na myśli to, że bajty o wartości od 0x00 do 0x7F kodują punkty kodowe Unicode od U + 0000 do U + 007F. Prawdopodobnie będzie to miało dla Ciebie znaczenie tylko wtedy, gdy kiedykolwiek napiszesz normę techniczną.
Jeśli interesuje Cię historia ASCII i poprzedzające ją kodowania, zacznij od artykułu „The Evolution of Character Codes, 1874-1968” (kopia samizdat dostępna pod adresem http://falsedoor.com/doc/ascii_evolution-of- character-cod.pdf ), a następnie gonić za jego referencjami (z których wiele nie jest dostępnych w Internecie i może być trudnych do znalezienia nawet przy dostępie do biblioteki uniwersyteckiej, przykro mi to mówić).
W systemie Linux
man ascii
mówi:źródło
Oryginalna tablica ASCII jest zakodowana na 7 bitach, więc ma 128 znaków.
Obecnie większość czytelników / redaktorów używa "rozszerzonej" tabeli ASCII (z ISO 8859-1 ), która jest zakodowana na 8 bitach i ma 256 znaków (w tym Á , Ę , Œ , é , è i inne znaki przydatne również w językach europejskich jako glify matematyczne i inne symbole).
Chociaż UTF-8 używa tego samego kodowania, co podstawowa tabela ASCII (co
0x41
oznacza, że w obu kodach jest A ), nie ma tego samego kodowania dla bloku „Latin Extended-A”. Co czasami powoduje, że dziwne postacie pojawiają się w słowach takich jak à la carte lub piñata .źródło
Kodowanie ASCII jest 7-bitowe, ale w praktyce znaki zakodowane w ASCII nie są przechowywane w grupach po 7 bitów. Zamiast tego jeden ASCII jest przechowywany w bajcie, z MSB zwykle ustawionym na 0 (tak, jest marnowany w ASCII).
Możesz to sprawdzić, wprowadzając ciąg w zestawie znaków ASCII w edytorze tekstu, ustawiając kodowanie na ASCII i przeglądając binarny / szesnastkowy:
Poza tym: stosowanie (ściśle) kodowania ASCII jest teraz rzadkością na korzyść UTF-8 (co nie marnuje wspomnianego powyżej MSB - w rzeczywistości MSB 1 wskazuje, że punkt kodowy jest kodowany z więcej niż 1 bajtem).
źródło
Oryginalny kod ASCII zawierał 128 różnych znaków ponumerowanych od 0 do 127. ASCII a 7-bitowe są synonimami, ponieważ 8-bitowy bajt jest wspólnym elementem pamięci, ASCII pozostawia miejsce na 128 dodatkowych znaków, które są używane dla języków obcych i innych symboli. Ale kod 7-bitowy został pierwotnie utworzony przed kodem 8-bitowym. ASCII to skrót od American Standard Code for Information Interchange We wczesnych systemach poczty internetowej obsługiwał tylko 7-bitowe kody ASCII, ponieważ mógł wówczas wykonywać programy i pliki multimedialne za pośrednictwem systemów ssących. Systemy te używają 8 bitów bajtu, ale następnie należy go przekształcić w format 7-bitowy przy użyciu metod kodowania, takich jak MIME, UUcoding i BinHex. Oznacza to, że 8-bitowy został przekonwertowany na 7-bitowe znaki, co dodaje dodatkowe bajty do ich zakodowania.
źródło
kiedy nazywamy ASCII jako kod 7-bitowy, lewy najbardziej lewy bit jest używany jako bit znaku, więc przy 7 bitach możemy zapisać do 127. oznacza to od -126 do 127, ponieważ wartość Max imam ASCII wynosi od 0 do 255. może to być zadowalający tylko argument 7-bitowy, jeśli ostatni bit jest uważany za bit znaku
źródło