Czy kod ASCII jest 7-bitowy czy 8-bitowy?

Mój nauczyciel powiedział mi, że ASCII to 8-bitowy schemat kodowania znaków. Ale jest on zdefiniowany tylko dla kodów 0-127, co oznacza, że może zmieścić się w 7-bitach. Nie można więc argumentować, że bit ASCII jest w rzeczywistości kodem 7-bitowym?

A co mamy na myśli mówiąc, że ASCII to w ogóle kod 8-bitowy?

Author: Kevin Panko, 2013-02-04

6 answers

ASCII został pierwotnie pomyślany jako kod 7-bitowy. Zostało to zrobione na długo zanim 8-bitowe bajty stały się wszechobecne i nawet w latach 90.można było znaleźć oprogramowanie, które zakładało, że może używać 8-bitowego każdego bajtu tekstu do własnych celów ("nie 8-bitowe czyste"). Obecnie ludziemyślą o tym jako o 8-bitowym kodowaniu, w którym bajty od 0x80 do 0xFF nie mają zdefiniowanego znaczenia, ale jest toretcon .

Są dziesiątki kodowań tekstu, które wykorzystują 8. bitowe; mogą być klasyfikowane jako zgodne z ASCII lub nie oraz o stałej lub zmiennej szerokości. ASCII-compatible 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 nie zgodnym z ASCII, jeśli możesz go uniknąć; naiwne programy oczekujące ASCII mają tendencję do błędnego interpretowania ich w katastrofalny, często łamający bezpieczeństwo sposób. Są tak przestarzałe obecnie (na przykład) HTML5 zabrania ich używania w publicznej sieci, z niefortunnym wyjątkiem UTF-16 . Nie będę o nich więcej 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 kodowanie było zgodne z ASCII, kodowanie fixed-with musi kodować wszystkie swoje znaki używając tylko jednego bajtu, więc nie może mieć więcej niż 256 znaków. Najczęstszym tego typu kodowaniem w dzisiejszych czasach jest Windows-1252 , rozszerzenie ISO 8859-1 .

W dzisiejszych czasach 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 Unicode do kodowania zgodnego z ASCII. Naprawdę chcesz tego używać, jeśli możesz sobie z tym poradzić.

Jako ostatnia uwaga, "ASCII" obecnie bierze swoją praktyczną definicję z Unicode, a nie jego oryginalnego standardu (ANSI X3.4-1968), ponieważ historycznie tam było kilkadziesiąt wariacji na temat 127-znakowego repertuaru ASCII - na przykład niektóre znaki interpunkcyjne można zastąpić akcentowanymi literami, aby ułatwić przekazywanie tekstu francuskiego. Obecnie wszystkie te odmiany są przestarzałe, a kiedy ludzie mówią "ASCII", oznaczają, że bajty o wartości 0x00 do 0x7F kodują Unicode Punkty kodowe U + 0000 do U + 007F. prawdopodobnie będzie to miało znaczenie tylko dla Ciebie, jeśli kiedykolwiek znajdziesz się pisząc standard techniczny.

Jeśli jesteś w 2004 roku, w ramach projektu "the Evolution of Character Codes, 1874-1968", powstał projekt "The evolution of Character Codes, 1874-1968" (samizdat copy at {29]} http://falsedoor.com/doc/ascii_evolution-of-character-codes.pdf ), a następnie szukać jego referencji (wiele z nich nie jest dostępnych w Internecie i może być trudno znaleźć nawet z dostępem do biblioteki uniwersyteckiej, z przykrością stwierdzam).

 100
Author: zwol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-22 15:48:54

Na Linuksie man ascii says:

ASCII jest amerykańskim standardowym kodem wymiany informacji. Jest to kod 7-bitowy.

 15
Author: BeniBela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-04 16:06:42

Oryginalna tabela ASCII jest zakodowana na 7 bitów , 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 bitów i posiada 256 znaków (w tym Á, Ä, Œ, é, è i inne znaki przydatne w językach europejskich, a także glify matematyczne i inne symbole).

Podczas gdy UTF-8 używa tego samego kodowania co podstawowy Tabela ASCII (oznaczająca 0x41 jest A w obu kodach), nie ma tego samego kodowania dla bloku "Latin Extended-A". Co czasami powoduje pojawianie się dziwnych znaków w słowach takich jak à la carte lub piñata .

 10
Author: Guillaume,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-02 23:50:43

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 łańcuch znaków w zestawie znaków ASCII w edytorze tekstu, ustawiając kodowanie na ASCII i wyświetlając kod binarny/szesnastkowy:
Tutaj wpisz opis obrazka

Na bok: użycie (ściśle) kodowania ASCII jest obecnie rzadkością, na korzyść UTF-8 (co nie marnuje wspomniany powyżej MSB - w rzeczywistości MSB o wartości 1 oznacza, że punkt kodu jest zakodowany z więcej niż 1 bajtem).

 3
Author: flow2k,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-02 20:44:31

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 masowej, ASCII pozostawia miejsce na 128 dodatkowych znaków, które są używane w językach obcych i innych symbolach. Ale kod 7-bitowy był oryginalnie wykonany przed kodem 8-bitowym. ASCII oznacza American Standard Code for Information Interchange We wczesnych systemach poczty internetowej obsługiwał tylko 7-bitowe kody ASCII, stało się tak dlatego, że mógł wykonywanie programów i plików multimedialnych przez Systemy ssące. Systemy te używają 8 bitów bajtu, ale następnie muszą być przekształcone w 7-bitowy format za pomocą metod kodowania, takich jak MIME, UUcoding i BinHex. Oznacza to, że znaki 8-bitowe zostały przekonwertowane na znaki 7-bitowe, co dodaje dodatkowe bajty do ich kodowania.

 0
Author: brookey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-19 12:11:03

Gdy wywołujemy ASCII jako kod 7-bitowy, lewy większość bitów jest używany jako bit znakowy, więc z 7 bitami możemy zapisać do 127. oznacza to od -126 do 127, ponieważ maksymalna wartość ASCII wynosi od 0 do 255. może to być spełnione tylko z argumentem 7 bitów, jeśli ostatni bit jest traktowany jako bit znaku

 -3
Author: aju,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-24 16:04:15