Skip to content

Tabella ASCII e convertitore di caratteri

La tabella ASCII completa: 128 caratteri in decimale, esadecimale, ottale e binario, più un convertitore online testo ↔ ASCII. Ogni carattere di controllo ha il suo escape, la notazione caret e dove lo incontri.

Niente tracciamento Funziona nel browser Gratuito

Tutto gira nel tuo browser — quello che scrivi non viene mai caricato, registrato o memorizzato.

Testo e codice ASCII, in entrambi i sensi

La tabella ASCII completa (0–127)

128 / 128
Dec Esa Ott Binario Car. Nome Escape Caret HTML Dove lo incontri
0 00 000 00000000 NUL Null \0 ^@ � Terminatore di stringa in C; separa i nomi di file in find -print0 e xargs -0; fa dire a grep Binary file matches.
1 01 001 00000001 SOH Start of Heading ^A  Il protocollo FIX lo usa come separatore di campi, ed è per questo che i messaggi FIX sembrano un'unica riga attaccata.
2 02 002 00000010 STX Start of Text ^B  Intestazione di frame nei protocolli seriali, POS e dei lettori di codici a barre; tasto prefisso Ctrl+B di tmux.
3 03 003 00000011 ETX End of Text ^C  Ctrl+C invia questo byte; la disciplina di linea del tty lo trasforma in SIGINT: il tuo programma non lo vede mai.
4 04 004 00000100 EOT End of Transmission ^D  Ctrl+D invia la riga di input corrente; quando la riga è vuota, la lettura restituisce 0 byte, ed è quello l'EOF.
5 05 005 00000101 ENQ Enquiry ^E  Handshake dei vecchi collegamenti; alcuni terminali rispondono con una stringa di identificazione.
6 06 006 00000110 ACK Acknowledge ^F  Accoppiato a ENQ e NAK nei vecchi protocolli di collegamento; si vede ancora nei dispositivi seriali industriali.
7 07 007 00000111 BEL Bell \a ^G  printf '\a' suona il campanello; oggi più spesso chiude una sequenza OSC, come il titolo della finestra.
8 08 010 00001000 BS Backspace \b ^H  Cancellazione nelle barre di avanzamento. La maggior parte dei terminali per Backspace manda 0x7F, non questo byte.
9 09 011 00001001 HT Character Tabulation \t ^I 	 Le ricette di un Makefile devono iniziare con un TAB vero; gofmt indenta con i TAB; Tab e Ctrl+I sono lo stesso byte.
10 0A 012 00001010 LF Line Feed \n ^J 
 A capo su Unix e macOS; il core.autocrlf di git converte fra questo byte e CRLF.
11 0B 013 00001011 VT Line Tabulation \v ^K  Quasi estinto, ma conta ancora come interruzione di riga: splitlines() spezza su di lui, split("\n") no.
12 0C 014 00001100 FF Form Feed \f ^L  Salto pagina sulle stampanti; Ctrl+L pulisce il terminale; Emacs lo usa come separatore di sezione nel codice.
13 0D 015 00001101 CR Carriage Return \r ^M 
 La prima metà del CRLF di Windows; compare come ^M in git diff; causa bad interpreter: /bin/bash^M.
14 0E 016 00001110 SO Shift Out ^N  Passa al set di caratteri alternativo G1 in ISO 2022; racchiude le zone a due byte sui mainframe EBCDIC.
15 0F 017 00001111 SI Shift In ^O  Torna al set di caratteri G0 predefinito, in coppia con SO.
16 10 020 00010000 DLE Data Link Escape ^P  Prefisso di escape del byte stuffing nei vecchi protocolli binari.
17 11 021 00010001 DC1 Device Control One ^Q  XON — ripresa del controllo di flusso software; Ctrl+Q scongela l'output del terminale.
18 12 022 00010010 DC2 Device Control Two ^R  Nessun significato moderno fisso. Il Ctrl+R della shell è un binding di readline, senza relazione con questo codice.
19 13 023 00010011 DC3 Device Control Three ^S  XOFF — pausa del controllo di flusso software. Premere Ctrl+S per sbaglio è la causa abituale di un terminale congelato.
20 14 024 00010100 DC4 Device Control Four ^T  Nessun significato moderno fisso; su BSD e macOS, Ctrl+T è il tasto di stato del tty.
21 15 025 00010101 NAK Negative Acknowledge ^U  Ctrl+U cancella l'intera riga — quella è l'impostazione kill del tty, non il significato originale di questo codice.
22 16 026 00010110 SYN Synchronous Idle ^V  Ctrl+V è lnext: premilo e poi premi Tab per scrivere un TAB vero in bash senza far scattare il completamento.
23 17 027 00010111 ETB End of Transmission Block ^W  Ctrl+W cancella la parola precedente — l'impostazione werase del tty.
24 18 030 00011000 CAN Cancel ^X  ECMA-48 lo usa per interrompere una sequenza di controllo incompiuta; i terminali scartano la sequenza in analisi.
25 19 031 00011001 EM End of Medium ^Y  Oggi quasi non si usa; su BSD e macOS, Ctrl+Y è la sospensione differita.
26 1A 032 00011010 SUB Substitute ^Z  Marcatore di fine file nei file di testo CP/M e DOS, ed è per questo che le console Windows chiudono l'input con Ctrl+Z.
27 1B 033 00011011 ESC Escape ^[  Inizio di ogni sequenza di escape ANSI: \033[0m azzera il colore, \033[2J pulisce lo schermo. Anche Ctrl+[ lo invia.
28 1C 034 00011100 FS File Separator ^\  L'incapsulamento MLLP di HL7 v2 lo usa come terminatore di blocco; Ctrl+\ invia SIGQUIT.
29 1D 035 00011101 GS Group Separator ^]  Nei codici a barre GS1 il separatore FNC1 è questo byte — il delimitatore invisibile che emette il tuo lettore.
30 1E 036 00011110 RS Record Separator ^^  Le JSON Text Sequences della RFC 7464 lo mettono davanti a ogni record. Uno dei pochi usi moderni ancora vivi.
31 1F 037 00011111 US Unit Separator ^_  Separatore di campi nel testo strutturato, più sicuro di una virgola perché non compare mai nel contenuto.
32 20 040 00100000 Space  
33 21 041 00100001 Exclamation Mark !
34 22 042 00100010 Quotation Mark "
35 23 043 00100011 Number Sign #
36 24 044 00100100 Dollar Sign $
37 25 045 00100101 Percent Sign %
38 26 046 00100110 Ampersand &
39 27 047 00100111 Apostrophe '
40 28 050 00101000 Left Parenthesis (
41 29 051 00101001 Right Parenthesis )
42 2A 052 00101010 Asterisk *
43 2B 053 00101011 Plus Sign +
44 2C 054 00101100 Comma ,
45 2D 055 00101101 Hyphen-Minus -
46 2E 056 00101110 Full Stop .
47 2F 057 00101111 Solidus /
48 30 060 00110000 Digit Zero 0
49 31 061 00110001 Digit One 1
50 32 062 00110010 Digit Two 2
51 33 063 00110011 Digit Three 3
52 34 064 00110100 Digit Four 4
53 35 065 00110101 Digit Five 5
54 36 066 00110110 Digit Six 6
55 37 067 00110111 Digit Seven 7
56 38 070 00111000 Digit Eight 8
57 39 071 00111001 Digit Nine 9
58 3A 072 00111010 Colon :
59 3B 073 00111011 Semicolon &#59;
60 3C 074 00111100 Less-Than Sign <
61 3D 075 00111101 Equals Sign =
62 3E 076 00111110 Greater-Than Sign >
63 3F 077 00111111 Question Mark ?
64 40 100 01000000 Commercial At @
65 41 101 01000001 Latin Capital Letter A A
66 42 102 01000010 Latin Capital Letter B B
67 43 103 01000011 Latin Capital Letter C C
68 44 104 01000100 Latin Capital Letter D D
69 45 105 01000101 Latin Capital Letter E E
70 46 106 01000110 Latin Capital Letter F F
71 47 107 01000111 Latin Capital Letter G G
72 48 110 01001000 Latin Capital Letter H H
73 49 111 01001001 Latin Capital Letter I I
74 4A 112 01001010 Latin Capital Letter J J
75 4B 113 01001011 Latin Capital Letter K K
76 4C 114 01001100 Latin Capital Letter L L
77 4D 115 01001101 Latin Capital Letter M M
78 4E 116 01001110 Latin Capital Letter N N
79 4F 117 01001111 Latin Capital Letter O O
80 50 120 01010000 Latin Capital Letter P P
81 51 121 01010001 Latin Capital Letter Q Q
82 52 122 01010010 Latin Capital Letter R R
83 53 123 01010011 Latin Capital Letter S S
84 54 124 01010100 Latin Capital Letter T T
85 55 125 01010101 Latin Capital Letter U U
86 56 126 01010110 Latin Capital Letter V V
87 57 127 01010111 Latin Capital Letter W W
88 58 130 01011000 Latin Capital Letter X X
89 59 131 01011001 Latin Capital Letter Y Y
90 5A 132 01011010 Latin Capital Letter Z Z
91 5B 133 01011011 Left Square Bracket [
92 5C 134 01011100 Reverse Solidus \
93 5D 135 01011101 Right Square Bracket ]
94 5E 136 01011110 Circumflex Accent ^
95 5F 137 01011111 Low Line _
96 60 140 01100000 Grave Accent `
97 61 141 01100001 Latin Small Letter A a
98 62 142 01100010 Latin Small Letter B b
99 63 143 01100011 Latin Small Letter C c
100 64 144 01100100 Latin Small Letter D d
101 65 145 01100101 Latin Small Letter E e
102 66 146 01100110 Latin Small Letter F f
103 67 147 01100111 Latin Small Letter G g
104 68 150 01101000 Latin Small Letter H h
105 69 151 01101001 Latin Small Letter I i
106 6A 152 01101010 Latin Small Letter J j
107 6B 153 01101011 Latin Small Letter K k
108 6C 154 01101100 Latin Small Letter L l
109 6D 155 01101101 Latin Small Letter M m
110 6E 156 01101110 Latin Small Letter N n
111 6F 157 01101111 Latin Small Letter O o
112 70 160 01110000 Latin Small Letter P p
113 71 161 01110001 Latin Small Letter Q q
114 72 162 01110010 Latin Small Letter R r
115 73 163 01110011 Latin Small Letter S s
116 74 164 01110100 Latin Small Letter T t
117 75 165 01110101 Latin Small Letter U u
118 76 166 01110110 Latin Small Letter V v
119 77 167 01110111 Latin Small Letter W w
120 78 170 01111000 Latin Small Letter X x
121 79 171 01111001 Latin Small Letter Y y
122 7A 172 01111010 Latin Small Letter Z z
123 7B 173 01111011 Left Curly Bracket {
124 7C 174 01111100 Vertical Line |
125 7D 175 01111101 Right Curly Bracket }
126 7E 176 01111110 Tilde ~
127 7F 177 01111111 DEL Delete ^?  Quello che il tasto Backspace invia davvero su gran parte dei terminali. Dal nastro perforato: sette fori.

La colonna binaria è riempita fino a 8 bit per comodità di lettura. L'ASCII in sé è un codice a 7 bit — il bit più alto è sempre 0, ed è esattamente questo che permette a UTF-8 di restare retrocompatibile con lui.

E da 128 a 255?

L'ASCII non definisce affatto l'intervallo 128–255. «ASCII esteso» non è il nome di nessuno standard — è un termine vago per un'intera famiglia di codifiche a 8 bit. Lo stesso byte è un carattere diverso in ciascuna di esse:

Byte ISO-8859-1 Windows-1252 CP437 CP866
0x80 U+0080 Controllo C1 (invisibile) Ç А
0x93 U+0093 Controllo C1 (invisibile) ô У
0xB0 ° °
0xE9 é é Θ щ
0xFF ÿ ÿ U+00A0 U+00A0
Le classificazioni dei caratteri vengono incrociate con le categorie di Unicode al momento dei test, e la mappatura di Windows-1252 è verificata byte per byte contro il decoder della piattaforma. — Team di ingegneria di Go-Tools · Sep 2, 2026

Ogni valore della tabella è generato da un unico motore che eseguono sia il server sia il browser, quindi quello che legge un crawler e quello con cui interagisci tu non possono mai divergere. Le differenze di escape fra i linguaggi sono state verificate compilando ed eseguendo il codice in ciascuno, non citate a memoria.

Riferimento rapido

Qual è il codice ASCII della A?

A = 65 La `A` maiuscola è 65 in decimale, `0x41` in esadecimale, `101` in ottale e `01000001` in binario. La `a` minuscola è 97 — esattamente 32 in più, cioè un solo bit.

Quanti caratteri ha l'ASCII?

128 128, numerati da 0 a 127. Cioè 32 caratteri di controllo, 95 caratteri grafici contando lo spazio, e DEL.

Che cos'è l'ASCII 0?

0 = NUL NUL, il carattere nullo. Termina le stringhe in C, separa i nomi di file in `find -print0` e fa trattare un file come binario da `grep`.

Quale byte è l'a capo?

LF = 10, CR = 13 L'avanzamento di riga (LF) è 10 (`0x0A`, `\n`). Il ritorno a capo (CR) è 13 (`0x0D`, `\r`). I fine riga di Windows sono entrambi, prima il CR.

Che cos'è l'ASCII?

L'ASCII è una codifica di caratteri a 7 bit: 128 punti di codice, numerati da 0 a 127, e non uno di più. È stato pubblicato la prima volta come ASA X3.4-1963 e la sua forma attuale è ANSI X3.4-1986; la RFC 20 ne descrive l'uso su internet ed è stata elevata a standard internet STD 80 nel 2015. La primissima versione non aveva alcuna lettera minuscola; quelle sono arrivate con la revisione del 1967. Tutto ciò che sta sopra 127 appartiene a qualche altra codifica, non all'ASCII.

0x00-0x1F   32 C0 control characters
0x20         1 space (a graphic character, not a control)
0x21-0x7E   94 printable graphic characters
0x7F         1 DEL (a control character, but not part of C0)
            ---
            128 total

Che cosa ti dà questa tabella

Le quattro basi affiancate

Decimale, esadecimale, ottale e binario a 8 bit per ognuno dei 128 punti di codice, con quello zero iniziale che ti ricorda che l'ASCII in realtà è a 7 bit.

Le sequenze di escape per linguaggio

La colonna \0 \a \b \t \n \v \f \r, più le differenze che rompono davvero le build — JavaScript non ha \a, Java non ha né \a\v, e \e è un'estensione GNU e non ISO C.

Notazione caret

La colonna da ^@ a ^? e l'unica regola che copre tutti e 33 i caratteri di controllo: fare lo XOR del byte con 0x40. Non sommare, non sottrarre — XOR.

Dove incontri davvero ogni carattere di controllo

Non solo «SOH — start of heading», ma il fatto che i messaggi del protocollo FIX lo usano come separatore di campi, che 0x1D è il separatore invisibile che emette il tuo lettore di codici a barre, e che il Ctrl+S che ti congela il terminale è XOFF.

Un convertitore che si rifiuta di indovinare

La base la scegli tu. I byte oltre 127 vengono rifiutati con una nota su come si leggerebbero in Windows-1252 e in ISO-8859-1, invece di essere spacciati per ASCII.

I caratteri di controllo restano visibili

NUL, TAB e CR non hanno glifo, quindi l'anteprima li mostra con i Control Pictures di Unicode. Il pulsante di copia continua a darti i byte veri.

Codifiche collegate

ISO/IEC 8859-1 (Latin-1)

8 bit, un byte

Mantiene 0–127 identico all'ASCII e definisce 96 caratteri grafici da 0xA0 a 0xFF. L'intervallo 0x800x9F è lasciato ai caratteri di controllo C1, che sono invisibili.

Windows-1252

8 bit, un byte

Un sovrainsieme di ISO-8859-1 la cui unica differenza sta in 0x800x9F, dove mette 27 caratteri stampabili e ne lascia 5 non definiti. I browser lo usano ogni volta che una pagina si dichiara ISO-8859-1.

CP437

8 bit, un byte

La code page originale dell'IBM PC. La sua metà alta è fatta di lettere accentate, lettere greche e caratteri per disegnare riquadri — sono quelle le tabelle che si vedono negli articoli che promettono 256 caratteri ASCII.

UTF-8

Variabile, da 1 a 4 byte

Codifica tutto Unicode mantenendo ogni byte ASCII identico byte per byte. È retrocompatibile con US-ASCII, ma con nessuna delle code page a 8 bit qui sopra.

Esempi

Da testo a codici decimali

Hello
72 101 108 108 111

Ogni carattere diventa il suo punto di codice decimale. Le maiuscole vanno da 65 a 90 e le minuscole da 97 a 122 — esattamente 32 di distanza, ed è per questo che invertire il bit 5 cambia il maiuscolo o minuscolo.

Gli stessi codici letti in due basi

41 42 43
hex -> ABC     decimal -> )*+

È per questo che il convertitore non indovina mai la base al posto tuo. Entrambe le letture sono valide; solo tu sai quale intendevi.

I caratteri di controllo sopravvivono al giro completo

9 10 13 0
TAB, LF, CR, NUL

Sono invisibili nel riquadro di output, quindi la riga di anteprima li mostra con i Control Pictures di Unicode. Il pulsante di copia continua a copiare i byte veri, non i sostituti.

I byte oltre 127 vengono rifiutati, con una spiegazione

233
Outside ASCII (0-127)

233 non è un codice ASCII. Lo strumento ti dice che si legge é sia in Windows-1252 sia in ISO-8859-1, ma non lo farà passare per ASCII.

Come si usa

  1. 1

    Scegli la base

    Decimale, esadecimale, ottale o binaria. Fallo per primo — le stesse cifre si decodificano in modo diverso in ogni base e lo strumento si rifiuta di proposito di indovinare.

  2. 2

    Scrivi da una parte o dall'altra

    Il testo a sinistra, i codici a destra. Da qualunque parte tu scriva, l'altra si aggiorna.

  3. 3

    Leggi gli avvisi

    I caratteri fuori da 0–127 vengono elencati con il loro punto di codice e i byte UTF-8, invece di essere scartati in silenzio o trasformati in punti interrogativi.

  4. 4

    Usa la tabella come riferimento

    Filtra sui caratteri di controllo, cerca per codice o per nome, e clicca su un carattere qualsiasi per copiarlo.

Errori che vale la pena conoscere

Sostenere che l'ASCII abbia 256 caratteri

L'ASCII si ferma a 127. Tutto ciò che sta oltre appartiene a una precisa code page a 8 bit, che va nominata. Python te lo dirà senza giri di parole se gli chiedi di codificare una lettera accentata come ASCII.

✗ Errato
'cafe\u00e9'.encode('ascii')  # UnicodeEncodeError: ordinal not in range(128)
✓ Corretto
'cafe\u00e9'.encode('utf-8')   # b'cafe\xc3\xa9'

Dare per scontato che tutti i linguaggi abbiano gli stessi escape

JavaScript non ha l'escape \a. Invece di fallire, si mangia la barra rovesciata e ti lascia la lettera, e lo strict mode non aiuta.

✗ Errato
"\a".charCodeAt(0)   // 97 - that is the letter 'a', not BEL
✓ Corretto
"\x07".charCodeAt(0) // 7 - BEL

Spiegare la notazione caret come una somma

Sommare 0x40 funziona per l'intervallo C0 e poi si rompe su DEL, dove bisognerebbe invece sottrarre. Lo XOR è l'unica regola che copre tutti e 33.

✗ Errato
caret = chr(code + 0x40)   # 0x7F + 0x40 overflows past the table
✓ Corretto
caret = chr(code ^ 0x40)   # 0x00 -> @, 0x1B -> [, 0x7F -> ?

Quando ti serve

Leggere un dump esadecimale o una traccia di protocollo
Hai dei byte e devi capire quali sono stampabili, quali sono separatori e quali sono codici di controllo su cui il terminale sta agendo senza dirti niente.
Fare il debug di un file che si comporta in modo strano
Un CR di troppo alla fine di ogni riga, un NUL che fa dire a grep che il file è binario, oppure un TAB dove un Makefile ne pretendeva uno.
Scrivere un parser o un validatore
Decidere quali intervalli di byte accettare e mettere i confini nel punto giusto — 0x210x7E per i caratteri grafici, 0x20 per lo spazio, 0x7F per DEL.
Spiegare un bug di codifica
Mostrare a un collega perché lo stesso byte compare come tre caratteri diversi a seconda della code page che chi legge ha dato per scontata.

Dettagli tecnici

ASCII, Unicode e UTF-8
I primi 128 punti di codice di Unicode, da U+0000 a U+007F, corrispondono uno a uno all'ASCII. UTF-8 li codifica come singoli byte 0x000x7F con il bit più alto a 0. La proprietà che conta davvero è la terza: ogni byte di una sequenza UTF-8 multibyte ha il bit più alto a 1, quindi un byte nell'intervallo 0–127 non può mai far parte di un carattere non ASCII. È questo che rende sicuro scorrere UTF-8 un byte alla volta cercando /, \0 o \n.
L'ottavo bit
L'ASCII definisce un codice a 7 bit; memorizzare un carattere per byte da 8 bit è una convenzione, e storicamente quel bit avanzato faceva spesso da bit di parità. I trasporti di posta che garantivano solo la trasparenza a 7 bit sono il motivo per cui esistono Base64 e quoted-printable.
Perché l'alfabeto è disposto così
Le cifre 09 stanno in 0x300x39, così il nibble basso è il valore stesso. A è 0x41 e a è 0x61 — un solo bit di differenza, quindi c | 0x20 porta in minuscolo e c & 0xDF in maiuscolo. Ma solo per le lettere: '_' | 0x200x7F, cioè DEL, e '[' | 0x20{.
Le varianti nazionali e il problema di 0x5C
La ISO/IEC 646 permetteva di sostituire 12 punti di codice a seconda del paese. La giapponese JIS X 0201 ha messo un simbolo dello yen in 0x5C, la coreana KS X 1003 ci ha messo un simbolo del won — ed è per questo che un Windows giapponese mostra i percorsi con un simbolo dello yen mentre il byte resta 0x5C. In Shift_JIS va peggio: il secondo byte di un carattere a due byte può essere esso stesso 0x5C, e i caratteri hyou, so, juu, nou, kou e bou finiscono tutti con quel byte, quindi una gestione ingenua delle barre rovesciate li spezza a metà.

Come farlo bene

Nomina sempre la code page
«ASCII esteso» non dice niente a chi legge. Di' Windows-1252, oppure ISO-8859-1, oppure CP437 — lo stesso byte è un carattere diverso in ciascuna.
Di' US-ASCII quando è quello che intendi
È il nome registrato presso la IANA. charset=ascii non lo è, e in un browser charset=ISO-8859-1 ti darà in realtà Windows-1252, perché il WHATWG Encoding Standard mappa così quell'etichetta.
Non indovinare mai la base al posto dell'utente
Se il tuo strumento o il tuo parser decide in silenzio che 41 è esadecimale, sbaglierà all'incirca una volta su due e il fallimento sarà silenzioso.
Itera per punto di codice, non per unità UTF-16
"A" + chiave di violino + carattere cinese ha .length === 4 ma solo tre caratteri. Usa [...str] o codePointAt, altrimenti il tuo messaggio «carattere non supportato» segnalerà le emoji come due metà rotte.

Domande frequenti

Quanti caratteri ha l'ASCII?
128. L'ASCII è un codice a 7 bit, quindi definisce esattamente i punti di codice da 0 a 127: 32 caratteri di controllo C0, 95 caratteri grafici contando lo spazio, e DEL. Gli articoli intitolati «tabella ASCII completa (256 caratteri)» ti stanno mostrando una precisa code page a 8 bit — di solito CP437 o Windows-1252 — non l'ASCII.
Che cos'è l'ASCII esteso?
Niente, a rigore. «ASCII esteso» non è il nome di nessuno standard; è un termine vago per un'intera famiglia di codifiche a 8 bit che mantengono 0–127 identico e definiscono 128–255 ciascuna a modo suo. Il byte 0xE9 è é in ISO-8859-1, la lettera greca Θ in CP437 e una lettera cirillica in CP866. Senza dire di quale code page si parla, la domanda non ha risposta.
Windows-1252 è la stessa cosa di ISO-8859-1?
Sono identici da 0xA0 a 0xFF e completamente diversi da 0x80 a 0x9F. ISO-8859-1 lascia quell'intervallo ai caratteri di controllo C1, che sono invisibili; Windows-1252 ci mette 27 caratteri stampabili — il simbolo dell'euro, le virgolette curve, la lineetta e il trattino medio — e lascia 5 posizioni non definite. È per questo che una virgoletta curva copiata da un elaboratore di testi diventa un carattere di controllo invisibile appena passa da qualcosa che è davvero ISO-8859-1.
DEL è un carattere di controllo?
Sì. Unicode classifica U+007F come Cc, e iscntrl(127) del C è vero. Semplicemente non fa parte dell'insieme C0, che è rigorosamente 0x000x1F. Sta in fondo alla tabella per via del nastro perforato: 0x7F sono sette fori perforati e, una volta fatto un foro, non lo si può richiudere, quindi «tutti i fori perforati» era l'unico modo per marcare un carattere come cancellato.
Lo spazio è un carattere di controllo?
No, e parecchie tabelle ASCII sbagliano su questo punto. Unicode classifica lo spazio (0x20) come Zs, separatore di spazio, cioè un carattere grafico. Solo 0x000x1F e 0x7F sono caratteri di controllo.
Se l'ASCII è a 7 bit, perché la colonna binaria ne mostra 8?
Perché il byte è l'unità in cui tutto viene davvero memorizzato: il bit più alto vale semplicemente sempre 0. Quel riempimento non è estetico: proprio perché l'ASCII non usa mai l'ottavo bit, UTF-8 ha potuto prenderselo come segnale «questo fa parte di una sequenza multibyte», ed è questo che rende UTF-8 retrocompatibile con l'ASCII.
Tutti i linguaggi scrivono i caratteri di controllo allo stesso modo?
No, e le differenze mordono. \a (campanello) è standard in C e in Python, ma JavaScript non ha quell'escape — '\a' diventa silenziosamente la lettera a, senza errore nemmeno in strict mode. Java rifiuta sia \a sia \v. Go rifiuta \0 perché i suoi escape ottali devono avere esattamente tre cifre, quindi si scrive \000. E \e per ESC è un'estensione GNU, non ISO C.
Che cosa significa ^M in un diff o in vim?
È un ritorno a capo, il byte 13. La notazione caret scrive un carattere di controllo facendo lo XOR del suo valore con 0x40, così CR (0x0D) diventa ^M ed ESC (0x1B) diventa ^[. Vedere ^M alla fine di ogni riga significa che il file ha i fine riga CRLF di Windows; vedere bad interpreter: /bin/bash^M significa che uno script di shell se li è portati dietro.

Strumenti correlati

Vedi tutti gli strumenti →