Il codice ASCII è a 7 bit o 8 bit?


100

Il mio insegnante mi ha detto che ASCII è uno schema di codifica dei caratteri a 8 bit. Ma è definito solo per i codici 0-127, il che significa che può essere inserito in 7 bit. Quindi non si può sostenere che il bit ASCII sia effettivamente un codice a 7 bit?

E cosa intendiamo dire quando si dice che ASCII è un codice a 8 bit?

Risposte:


91

ASCII era infatti originariamente concepito come un codice a 7 bit. Ciò è stato fatto ben prima che i byte a 8 bit diventassero onnipresenti, e anche negli anni '90 si poteva trovare software che presupponeva di poter utilizzare l'8 ° bit di ogni byte di testo per i propri scopi ("non pulito a 8 bit"). Al giorno d'oggi le persone lo considerano una codifica a 8 bit in cui i byte da 0x80 a 0xFF non hanno un significato definito, ma è un retcon .

Esistono dozzine di codifiche di testo che utilizzano l'ottavo bit; possono essere classificati come compatibili con ASCII o meno e a larghezza fissa o variabile. Compatibilità ASCII significa che, indipendentemente dal contesto , singoli byte con valori da 0x00 a 0x7F codificano gli stessi caratteri che avrebbero in ASCII. Non vuoi avere nulla a che fare con una codifica di testo non compatibile con ASCII se puoi evitarlo; i programmi ingenui che si aspettano ASCII tendono a interpretarli erroneamente in modo catastrofico, spesso infrangendo la sicurezza. Sono così deprecati oggigiorno che (ad esempio) HTML5 ne proibisce l'uso sul Web pubblico, con la sfortunata eccezione di UTF-16 . Non ne parlerò più.

Una codifica a larghezza fissa significa come suona: tutti i caratteri sono codificati utilizzando lo stesso numero di byte. Per essere compatibile con ASCII, una codifica fissa deve codificare tutti i suoi caratteri utilizzando un solo byte, quindi non può contenere più di 256 caratteri. La codifica più comune al giorno d'oggi è Windows-1252 , un'estensione di ISO 8859-1 .

C'è solo una codifica compatibile con ASCII a larghezza variabile che vale la pena conoscere al giorno d'oggi, ma è molto importante: UTF-8 , che racchiude tutto Unicode in una codifica compatibile con ASCII. Vuoi davvero usarlo se puoi gestirlo.

Come nota finale, "ASCII" oggigiorno prende la sua definizione pratica da Unicode, non il suo standard originale (ANSI X3.4-1968), perché storicamente c'erano diverse dozzine di variazioni sul repertorio ASCII a 127 caratteri - per esempio, alcune di la punteggiatura potrebbe essere sostituita con lettere accentate per facilitare la trasmissione del testo francese. Oggigiorno tutte queste variazioni sono obsolete e quando la gente dice "ASCII" significa che i byte con valore da 0x00 a 0x7F codificano i punti di codice Unicode da U + 0000 a U + 007F. Questo probabilmente ti interesserà solo se ti ritroverai a scrivere uno standard tecnico.

Se sei interessato alla storia di ASCII e alle codifiche che l'hanno preceduta, inizia con l'articolo "The Evolution of Character Codes, 1874-1968" (copia samizdat su http://falsedoor.com/doc/ascii_evolution-of- character-codes.pdf ) e poi inseguirne i riferimenti (molti dei quali non sono disponibili online e possono essere difficili da trovare anche con l'accesso a una biblioteca universitaria, mi dispiace dirlo).


1
Quindi ASCII oggi è 7 bit o 8 bit? Dici che ora usa 0x00-0x7F, ovviamente. Ma contiamo lo 0 iniziale?
Anurag Kalia

8
Dipende dal tipo di pedante che sei. La specifica che ancora definisce ufficialmente ASCII (ANSI X3.4-1968) lo descrive come una codifica a 7 bit, ma nessuno trasmette più byte a 7 bit e l'interoperabilità oggigiorno impone che l'ottavo bit debba essere zero - non è possibile usalo per un bit di parità o simile. Quindi è altrettanto valido IMNSHO descrivere ASCII come una codifica a otto bit che lascia la metà superiore del suo spazio numerico come "riservato, non usare". In entrambi i casi, se si trasmette a otto bit byte ognuno dei quali hanno il loro set di alto bit, si sta non trasmettendo ASCII valido.
zwol

1
(... ma potresti trasmettere qualcos'altro valido, come UTF-8 o ISO 8859-1 o KOI8-R.)
zwol

1
Per essere veramente pedanti, lo standard è ora INCITS 4-1986 [R2012] perché ASC precedentemente noto come X3 è mutato in NCITS e poi INCITS. Ma le varianti a 7 bit con circa una dozzina di lettere accentate per francese, tedesco, spagnolo, ecc. Non sono nulla ANSI / INCITS, piuttosto ISO / IEC 646 ed ECMA-6. Ed è 8859-1 a 8 bit (ISO / IEC) che forma il primo blocco di 256 caratteri di Unicode.
dave_thompson_085

2
@ dave_thompson_085 Non tutti sono pedanti come te - il che significa che puoi trovare documentazione tecnica precedente, e persino standard, che fanno riferimento ad "ASCII", o anche "X3.4-1968", con l'intenzione di includere le varianti nazionali, o almeno non escluderlo chiaramente, portando a discussioni. Pertanto, personalmente utilizzerei Unicode come riferimento normativo per ASCII se dovessi scrivere una specifica dove è importante. È tutto quello che volevo dire.
Zwol

14

Su Linux man asciidice:

ASCII è il codice standard americano per l'interscambio di informazioni. È un codice a 7 bit.


9

La tabella ASCII originale è codificata su 7 bit quindi ha 128 caratteri.

Oggigiorno la maggior parte dei lettori / editor utilizza una tabella ASCII "estesa" (da ISO 8859-1 ), che è codificata su 8 bit e dispone di 256 caratteri (inclusi Á , Ä , Œ , é , è e altri caratteri utili anche per le lingue europee come glifi matematici e altri simboli).

Sebbene UTF-8 utilizzi la stessa codifica della tabella ASCII di base (il significato 0x41è A in entrambi i codici), non condivide la stessa codifica per il blocco "Latin Extended-A". Il che a volte fa apparire strani caratteri in parole come à la carte o piñata .


Ci sono diversi errori in quanto sopra. Œ non fa parte di ISO 8859-1 sebbene sia in CP-1252 . E il blocco Latin Extended-A non è i primi 128 o 256 caratteri di Unicode: è il blocco successivo dopo che questi contengono lettere come ğ, ł e ſ.
Richard Smith

Buon punto! Penso che volessi dire "Latin-1 Supplement". Standard standard ...
Guillaume

1
Esistono molti set di caratteri "ASCII estesi" e solo uno di essi è ISO 8859-1. Il termine è quasi privo di significato perché quando si codifica e si decodifica il testo è necessario sapere quale codifica di caratteri specifica viene utilizzata (e potrebbe non essere nemmeno per un set di caratteri ASCII esteso).
Tom Blodget

2

La codifica ASCII è a 7 bit, ma in pratica i caratteri codificati in ASCII non vengono memorizzati in gruppi di 7 bit. Invece, un ASCII è memorizzato in un byte, con MSB solitamente impostato su 0 (sì, è sprecato in ASCII).

Puoi verificarlo inserendo una stringa nel set di caratteri ASCII in un editor di testo, impostando la codifica su ASCII e visualizzando il binario / esadecimale:
inserisci qui la descrizione dell'immagine

A parte: l'uso della codifica (rigorosamente) ASCII è ormai raro, a favore di UTF-8 (che non spreca l'MSB di cui sopra - infatti, un MSB di 1 indica che il punto di codice è codificato con più di 1 byte).


0

Il codice ASCII originale forniva 128 caratteri diversi numerati da 0 a 127. ASCII a 7 bit sono sinonimi, poiché il byte a 8 bit è l'elemento di memorizzazione comune, ASCII lascia spazio a 128 caratteri aggiuntivi che vengono utilizzati per le lingue straniere e altri simboli. Ma il codice a 7 bit è stato originariamente creato prima del codice a 8 bit. ASCII sta per American Standard Code for Information Interchange Nei primi sistemi di posta Internet, supportava solo codici ASCII a 7 bit, questo perché poteva quindi eseguire programmi e file multimediali su sistemi suck. Questi sistemi utilizzano 8 bit del byte, ma poi devono essere trasformati in un formato a 7 bit utilizzando metodi di codifica come MIME, UUcoding e BinHex. Ciò significa che l'8 bit è stato convertito in un carattere a 7 bit, che aggiunge byte extra per codificarli.


-3

quando chiamiamo ASCII come codice a 7 bit, il bit più a sinistra viene utilizzato come bit di segno quindi con 7 bit possiamo scrivere fino a 127. ciò significa da -126 a 127 perché il valore massimo imam di ASCII è da 0 a 255. questo può essere soddisfatto dell'argomento 7 bit solo se l'ultimo bit è considerato come bit di segno


Come può un personaggio avere un segno?
Oleh Misarosh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.