La Tabella ASCII e la Funzione Chr: Guida Completa alla Codifica dei Caratteri

La gestione dei caratteri, specialmente dei caratteri speciali, è uno degli argomenti che contribuisce alla corretta visibilità delle informazioni contenute nei nostri progetti web-based e nelle applicazioni. Nel campo della gestione e della programmazione del testo, il concetto di codifica dei caratteri costituisce una pietra miliare fondamentale. È la struttura che ci consente di convertire i dati binari che i computer comprendono in caratteri leggibili dall'uomo. Dagli albori dell'informatica, il primo problema è stato quello di codificare in un formato riconoscibile dai nostri computer le lettere dell'alfabeto, i numeri e i caratteri speciali.

Tavola comparativa di codifiche caratteri

Che cos'è il Codice ASCII?

La sigla "ASCII" è l'acronimo di American Standard Code for Information Interchange, che letteralmente significa "codice standard americano per lo scambio di informazioni". In parole semplici, il codice ASCII è la rappresentazione numerica di un carattere. È un codice per la codifica di caratteri. In pratica, la codifica ASCII è la codifica standard per il testo. Un tipico file in formato ASCII può essere creato utilizzando il classico Blocco Note di Windows, oppure con TextEdit di iMac salvando in formato "solo testo".

La prima edizione dello standard ASCII è stata pubblicata dall'American National Standards Institute (ANSI) nel 1963. Il codice ha subito un'importante revisione nel 1968 e l'aggiornamento più recente risale al 1986. L'ASCII standard è un codice di caratteri a 7 bit, in cui ogni bit rappresenta un carattere univoco. Questo significa che l'ASCII standard è limitato a 128 caratteri.

La Tabella ASCII US Standard

La tabella seguente è relativa al codice US ASCII, ANSI X3.4-1986 (ISO 646 International Reference Version). I codici decimali da 0 a 31 e il 127 sono caratteri non stampabili (caratteri di controllo). Il 32 corrisponde al carattere di "spazio". Esistono 96 caratteri ASCII stampabili, numerati da 32 a 127.

DecHexCharDescrizioneDecHexCharDescrizioneDecHexCharDescrizioneDecHexCharDescrizione
000NULNull char3220SPSpazio6440@Chiocciola9660`Backtick
101SOHStart of Header3321!Punto esclamativo6541ALettera A maiuscola9761aLettera a minuscola
202STXStart of Text3422"Doppie virgolette6642BLettera B maiuscola9862bLettera b minuscola
303ETXEnd of Text3523#Hash6743CLettera C maiuscola9963cLettera c minuscola
404EOTEnd of Transmission3624$Simbolo dollaro6844DLettera D maiuscola10064dLettera d minuscola
505ENQEnquiry3725%Percento6945ELettera E maiuscola10165eLettera e minuscola
606ACKAcknowledge3826&E commerciale7046FLettera F maiuscola10266fLettera f minuscola
707BELBell3927'Apostrofo7147GLettera G maiuscola10367gLettera g minuscola
808BSBackspace4028(Parentesi aperta7248HLettera H maiuscola10468hLettera h minuscola
909HTHorizontal Tab4129)Parentesi chiusa7349ILettera I maiuscola10569iLettera i minuscola
100ALFLine Feed422A*Asterisco744AJLettera J maiuscola1066AjLettera j minuscola
110BVTVertical Tab432B+Segno più754BKLettera K maiuscola1076BkLettera k minuscola
120CFFForm Feed442C,Virgola764CLLettera L maiuscola1086ClLettera l minuscola
130DCRCarriage Return452D-Trattino774DMLettera M maiuscola1096DmLettera m minuscola
140ESOShift Out462E.Punto784ENLettera N maiuscola1106EnLettera n minuscola
150FSIShift In472F/Barra794FOLettera O maiuscola1116FoLettera o minuscola
1610DLEData Link Escape48300Zero8050PLettera P maiuscola11270pLettera p minuscola
1711DC1Device Control 149311Uno8151QLettera Q maiuscola11371qLettera q minuscola
1812DC2Device Control 250322Due8252RLettera R maiuscola11472rLettera r minuscola
1913DC3Device Control 351333Tre8353SLettera S maiuscola11573sLettera s minuscola
2014DC4Device Control 452344Quattro8454TLettera T maiuscola11674tLettera t minuscola
2115NAKNegative Acknowledge53355Cinque8555ULettera U maiuscola11775uLettera u minuscola
2216SYNSynchronous Idle54366Sei8656VLettera V maiuscola11876vLettera v minuscola
2317ETBEnd of Trans. Block55377Sette8757WLettera W maiuscola11977wLettera w minuscola
2418CANCancel56388Otto8858XLettera X maiuscola12078xLettera x minuscola
2519EMEnd of Medium57399Nove8959YLettera Y maiuscola12179yLettera y minuscola
261ASUBSubstitute583A:Due punti905AZLettera Z maiuscola1227AzLettera z minuscola
271BESCEscape593B;Punto e virgola915B[Parentesi quadra aperta1237B{Parentesi graffa aperta
281CFSFile Separator603C<Minore di925C\Barra rovesciata1247C| Barra verticale
291DGSGroup Separator613D=Uguale a935D]Parentesi quadra chiusa1257D}Parentesi graffa chiusa
301ERSRecord Separator623E>Maggiore di945E^Accento circonflesso1267E~Tilde
311FUSUnit Separator633F?Punto interrogativo955F_Sottolineatura1277FDELDelete

Tabella dei caratteri ASCII stampabili e non stampabili

L'Evoluzione dell'ASCII: Estensioni e Unicode

Alla specifica iniziale basata su codici di 7 bit fecero seguito negli anni molte proposte di estensione a 8 bit, con lo scopo di raddoppiare il numero di caratteri rappresentabili. Queste estensioni, spesso indicate con extended ASCII o high ASCII, non sono mai diventate uno standard internazionale. Queste codifiche sono differenti da paese a paese e una stessa nazione può avere più codifiche differenti attivabili. Ad esempio, i set utilizzati in sistemi operativi come CP/M erano diversi per ogni produttore, e a sua volta differenti dai set utilizzati in MS-DOS, a sua volta diverso da quelli di Windows, Linux e MacOS.

In questo ASCII esteso, i caratteri aggiunti sono ad esempio vocali accentate, simboli semigrafici e altri simboli di uso meno comune, pensati anche per adattarsi alle specificità delle diverse lingue. Per esempio, alcuni sistemi usano delle sottopagine dello standard 646, nei Mac c'era la gestione Mac Roman, in MS-DOS si usavano spesso sotto-pagine dei codepage 437, 850, 852, 1252, ISO 8859-1 in occidente (ognuno con una serie di sotto-pagine), del 866 nell'ex blocco sovietico.

A sua volta, il problema della rappresentazione nelle varie lingue è stato superato dalle codifiche Escape e dai codici ANSI, e poi esteso e uniformato con i vari standard Unicode, mentre l'unico ASCII davvero standard rimane quello a 7 bit.

Diagramma di flusso della codifica dei caratteri

Quando con la globalizzazione dei sistemi informatici è diventata evidente la necessità di un set di caratteri più completo, è stato sviluppato Unicode. Lo standard successore di ASCII è l'UTF-8, che è diventato la codifica principale di Unicode per internet secondo il W3C. Il W3C, pur non impedendo altre codifiche (purché correttamente dichiarate), lo consiglia e lo usa quasi sistematicamente negli esempi del suo sito, fornendo anche le istruzioni per convertire i documenti. Questa codifica di Unicode, che ormai è universalmente accettata da ogni nuovo programma, offre caratteristiche interessanti grazie al fatto di sfruttare il bit di controllo del vecchio ASCII in modo più efficiente. Se da una parte lo prepara per la pensione, UTF-8 in un certo senso ha reso molto più longevo l'ASCII, inglobandolo in una codifica più adatta alle esigenze attuali. UTF-8 infatti si distingue dalle altre codifiche Unicode perché sfrutta il vecchio bit di parità di ASCII, non come bit di controllo, bensì come indicatore: analizza ogni byte, e se al posto del vecchio bit di parità c'è 0, allora il byte sarà letto come ASCII a 7 bit e teoricamente compatibile anche con programmi obsoleti; se però il byte corrente inizia con 1, allora sarà concatenato al byte successivo (o ai successivi, in realtà il meccanismo è un poco più complesso).

La Funzione "Chr" in VBA

Nel contesto di VBA (Visual Basic for Applications), la funzione "Chr" è uno strumento versatile che può migliorare significativamente la manipolazione e la gestione del testo. Funge da ponte tra il mondo binario dei valori ASCII e il regno più familiare dei caratteri, consentendo agli sviluppatori di inserire caratteri speciali in stringhe che non sono facilmente disponibili sulla tastiera o di rendere il codice più leggibile e gestibile evitando oscuri codici ASCII.

Dal punto di vista di un principiante, la funzione "Chr" è un passaggio per comprendere come i caratteri e i numeri sono interconnessi nel regno dell'informatica. Per lo sviluppatore esperto, rappresenta un potente strumento per creare sofisticati algoritmi di elaborazione del testo. Dal punto di vista di un programmatore esperto, la funzione "Chr" è preziosa per creare interfacce intuitive e codice leggibile. Per i principianti, si tratta di un'introduzione delicata al concetto di valori ASCII e al loro ruolo nella codifica del testo.

Utilizzi Principali della Funzione "Chr"

  1. Conversione del valore ASCII: Sostanzialmente, la funzione "Chr" converte un valore ASCII, che è un numero, nel carattere corrispondente. Questo semplice esempio evidenzia la relazione diretta tra i valori numerici ASCII e le loro controparti di caratteri, una relazione che viene sfruttata dalla funzione "Chr" per aggiungere carattere alla gestione del testo in VBA.
  2. Caratteri speciali: Spesso è necessario includere caratteri come interruzioni di riga o tabulazioni in una stringa. I caratteri di controllo comunemente utilizzati includono il ritorno a capo (Chr(10), Line Feed - LF) e il ritorno a capo (Chr(13), Carriage Return - CR). Ad esempio, nel seguente codice, stiamo creando una stringa che include interruzioni di riga e una tabulazione, dimostrando come è possibile utilizzare Chr per controllare la formattazione dell'output di testo in VBA:vbaDim myString As StringmyString = "Prima riga" & Chr(13) & Chr(10) & "Seconda riga con" & Chr(9) & "tabulazione."MsgBox myStringQuando si visualizzano messaggi all'utente, la leggibilità è fondamentale.
  3. Sequenze di escape: Nelle situazioni in cui è necessario inserire virgolette all'interno di una stringa, è possibile utilizzare la funzione Chr per evitare errori di sintassi. Ad esempio, per inserire delle virgolette doppie (") all'interno di una stringa:vbaDim myStringWithQuotes As StringmyStringWithQuotes = "Questo è un testo con " & Chr(34) & "virgolette" & Chr(34) & " all'interno."MsgBox myStringWithQuotes
  4. Concatenazione con stringhe: Chr può essere utilizzato all'interno di una concatenazione di stringhe per aggiungere caratteri speciali.vbaDim welcomeMessage As StringwelcomeMessage = "Benvenuto, utente!" & Chr(10) & "Siamo lieti di averti qui."MsgBox welcomeMessage
  5. Interazione con altre applicazioni: Alcune applicazioni richiedono caratteri ASCII specifici per eseguire determinate azioni. Ad esempio, in Excel, potresti voler allineare il testo all'interno di una cella o su più celle.
  6. Generazione dinamica dei caratteri: La funzione "Chr" può essere utilizzata per generare caratteri in modo dinamico in base all'input dell'utente o ad altre variabili.
  7. Caratteri speciali per le interfacce: Spesso le interfacce utente richiedono caratteri speciali che non sono facilmente disponibili sulla tastiera. La funzione "Chr" può essere utilizzata per aggiungere questi caratteri alle stringhe da visualizzare nei moduli o nei messaggi utente.
  8. Codifica e decodifica dei dati: Quando si ha a che fare con la trasmissione o l'archiviazione dei dati, la codifica dei dati in un formato non leggibile può essere essenziale per la sicurezza. La funzione "Chr" può trasformare i dati in caratteri ASCII, che possono poi essere decodificati nella forma originale.
  9. Automazione delle attività ripetitive: Chr può essere un valido aiuto nell'automazione di compiti ripetitivi che richiedono l'inserimento di caratteri specifici.

Comprendere e utilizzare la funzione "Chr" è essenziale per chiunque desideri eseguire una manipolazione avanzata del testo in VBA.

TT 201612 funzioni standard Excel in VBA

Limitazioni e Considerazioni della Funzione "Chr"

Sebbene Chr sia potente, è importante ricordare che funziona solo con set di caratteri a byte singolo. Per il pieno supporto Unicode, dovrebbe essere usato ChrW.

Gli utenti spesso incontrano una serie di problemi quando lavorano con la funzione "Chr" in VBA, che possono lasciare perplessi, soprattutto per coloro che sono nuovi alla programmazione o non hanno familiarità con le sfumature della codifica dei caratteri. La funzione "Chr" è progettata per convertire un valore ASCII nel carattere corrispondente, il che è un compito semplice, ma non è immune da problemi. Questi problemi possono variare dall'output errato dei caratteri agli errori nell'esecuzione del codice e la comprensione delle cause principali è essenziale per una risoluzione efficace dei problemi.

  1. Valore ASCII errato: Il problema più elementare si verifica quando viene fornito un valore ASCII errato. Ad esempio, "Chr(65)" dovrebbe restituire la lettera maiuscola "A", ma se utilizzi erroneamente "Chr(165)", otterrai un carattere completamente diverso (che potrebbe variare a seconda della codifica).
  2. Intervallo ASCII esteso: Ricorda che la tabella ASCII standard arriva solo fino a 127. I valori da 128 a 255 fanno parte del set ASCII esteso e possono variare in base alla tabella codici del sistema. Questo significa che un carattere Chr(150) potrebbe essere un simbolo diverso su un sistema con una codepage rispetto a un altro.
  3. Gestione dei caratteri non stampabili: Alcuni valori ASCII corrispondono a caratteri non stampabili, come Chr(13) per il ritorno a capo. Questi caratteri non sono visibili direttamente, ma influenzano la formattazione del testo.
  4. Limitazioni del tipo di dati: VBA utilizza il tipo di dati "Integer" per l'argomento della funzione "Chr", che limita l'intervallo da -32.768 a 32.767. L'uso di valori al di fuori di questo intervallo causerà un errore di run-time.
  5. Conflitti di codifica dei caratteri: Quando si lavora con sistemi che utilizzano codifiche di caratteri diverse, come UTF-8, la funzione "Chr" potrebbe non restituire il carattere previsto perché è progettata per ASCII. In questi casi, è necessario utilizzare ChrW per i caratteri Unicode o convertire la codifica.
  6. Errori di sintassi: Semplici errori di sintassi, come parentesi mancanti o utilizzo di Chr senza argomenti, possono causare errori nel codice.
  7. Confusione con ChrB e ChrW: ChrB viene utilizzato per restituire byte anziché caratteri e ChrW per caratteri Unicode. È fondamentale scegliere la funzione corretta a seconda del tipo di carattere che si intende manipolare.

Codifica dei Caratteri in VBA

In VBA, la funzione "Chr" viene utilizzata per restituire un carattere corrispondente a un codice ASCII, mentre "ChrW" viene utilizzata per i caratteri Unicode. La comprensione di queste distinzioni è cruciale per la gestione di testi multilingue. Spesso è necessario convertire il testo da una codifica all'altra, soprattutto quando si ha a che fare con l'internazionalizzazione.

Altre Funzioni di Manipolazione del Testo in VBA

Nel regno di VBA, la manipolazione del testo è un compito comune e la funzione Chr gioca un ruolo fondamentale in questo dominio. È una funzione che, in base alla progettazione, è semplice ma potente e consente agli sviluppatori di inserire caratteri che non sono immediatamente disponibili sulla tastiera o di aggiungere caratteri di controllo nelle stringhe. Tuttavia, quando si tratta di gestione del testo, Chr è solo uno dei tanti strumenti nell'arsenale VBA. Ciascuna funzione ha il suo scopo unico e, se utilizzate in combinazione, possono gestire praticamente qualsiasi attività di elaborazione del testo che potresti incontrare.

  1. Funzione Asc: La funzione Asc è la controparte di Chr. Laddove Chr converte un valore ASCII nel suo carattere equivalente, Asc fa il contrario, traducendo un carattere nel suo valore ASCII.vbaDim charValue As StringcharValue = "A"Dim asciiCode As IntegerasciiCode = Asc(charValue) ' asciiCode sarà 65MsgBox "Il codice ASCII di 'A' è: " & asciiCode
  2. Funzione Len: Mentre Chr si occupa della creazione del personaggio, Len si concentra sulla determinazione della lunghezza. Restituisce il numero di caratteri in una stringa, utile per cicli, convalide o controlli delle dimensioni.vbaDim myText As StringmyText = "Ciao mondo!"Dim textLength As IntegertextLength = Len(myText) ' textLength sarà 11MsgBox "La lunghezza del testo è: " & textLength
  3. Funzione Mid: Mid è una funzione che estrae una sottostringa da una stringa più grande, iniziando da un punto specificato e continuando per un numero definito di caratteri. A differenza di Chr, che aggiunge personaggi, Mid li recupera.vbaDim fullString As StringfullString = "Programmazione VBA"Dim subString As StringsubString = Mid(fullString, 5, 8) ' subString sarà "rammazio"MsgBox "Sottostringa estratta: " & subString
  4. Funzioni Left e Right: Queste funzioni sono simili a Mid ma sono più specifiche nel loro funzionamento. Left restituisce un numero specificato di caratteri dall'inizio di una stringa e Right fa lo stesso dalla fine.vbaDim exampleString As StringexampleString = "VBA è potente"Dim leftPart As StringleftPart = Left(exampleString, 3) ' leftPart sarà "VBA"Dim rightPart As StringrightPart = Right(exampleString, 7) ' rightPart sarà "potente"MsgBox "Parte sinistra: " & leftPart & ", Parte destra: " & rightPart
  5. Funzione Replace: La funzione Replace viene utilizzata per sostituire un set di caratteri con un altro all'interno di una stringa. È un passo avanti rispetto a Chr in quanto può alterare il testo esistente anziché semplicemente aggiungerlo.vbaDim originalString As StringoriginalString = "Ciao a tutti"Dim newString As StringnewString = Replace(originalString, "tutti", "mondo") ' newString sarà "Ciao a mondo"MsgBox "Stringa modificata: " & newString
  6. Funzione InStr: InStr è una funzione di ricerca che restituisce la posizione di una sottostringa all'interno di un'altra stringa, cosa che Chr non può fare.vbaDim sentence As Stringsentence = "La programmazione è divertente"Dim position As Integerposition = InStr(sentence, "divertente") ' position sarà 21MsgBox "La parola 'divertente' inizia alla posizione: " & position
  7. Funzione StrConv: StrConv può convertire una stringa in maiuscolo, minuscolo o maiuscolo, il che va oltre lo scopo di Chr.vbaDim mixedCase As StringmixedCase = "eSeMpIo DI TeStO"Dim upperCase As StringupperCase = StrConv(mixedCase, vbUpperCase) ' upperCase sarà "ESEMPIO DI TESTO"MsgBox "Testo in maiuscolo: " & upperCase
  8. Funzione Format: Infine, la funzione Format, che viene utilizzata per convertire numeri e date in stringhe, può essere utilizzata anche per formattare il testo in vari modi. Questa è una funzione più avanzata rispetto a Chr, poiché si occupa dei tipi di dati e della formattazione.

Questo script dimostra come Chr possa essere utilizzato insieme a Replace, Left e InStr per manipolare una stringa in modo efficace:

Dim mySentence As StringmySentence = "Questa è una frase di esempio con un errore."' Usiamo Chr per aggiungere un punto esclamativo alla finemySentence = mySentence & Chr(33) ' Aggiunge "!"' Troviamo la posizione di "errore"Dim errorPos As IntegererrorPos = InStr(mySentence, "errore")' Se l'errore è trovato, sostituiamoloIf errorPos > 0 Then mySentence = Replace(mySentence, "errore", "correzione")End If' Prendiamo i primi 10 caratteriDim firstTen As StringfirstTen = Left(mySentence, 10)MsgBox "Frase finale: " & mySentence & Chr(10) & "Primi dieci caratteri: " & firstTen

Confronto tra funzioni di manipolazione stringhe in VBA

Ottimizzazione dell'Uso della Funzione "Chr" in VBA

Ottimizzare le prestazioni dei tuoi script VBA è fondamentale, soprattutto quando si ha a che fare con funzioni come "Chr" che vengono spesso chiamate a gestire il testo. Sebbene "Chr" sia una funzione semplice che converte i valori ASCII nei caratteri corrispondenti, il suo uso improprio o eccessivo può portare a complicazioni o rallentamenti inutili nel codice. È importante comprendere che ogni chiamata di funzione, non importa quanto piccola, si somma in termini di tempo di elaborazione.

Dal punto di vista dello sviluppatore, la chiave è ridurre al minimo le chiamate a "Chr". Invece di chiamare ripetutamente "Chr" all'interno di un ciclo, considera di usarlo una volta per impostare una variabile se il carattere non cambierà durante l'esecuzione del ciclo. Dal punto di vista del sistema, ricorda che VBA opera all'interno dell'applicazione host, come Excel, il che significa che le prestazioni complessive dipendono anche dallo stato dell'applicazione. Se lo script viene eseguito insieme a formule o grafici complessi, le prestazioni potrebbero risentirne.

  1. Preassegna i caratteri alle variabili: Se utilizzi lo stesso carattere "Chr" più volte, assegnalo a una variabile all'inizio. Questo evita chiamate ripetute alla funzione.

    Dim newlineChar As StringnewlineChar = Chr(10) ' Assegna una voltaDim i As LongDim resultString As StringFor i = 1 To 10000 resultString = resultString & "Riga " & i & newlineCharNext i
  2. Concatena i loop esterni: Quando crei stringhe con Chr, fallo al di fuori dei loop quando possibile.

  3. Evita chiamate Chr non necessarie: Utilizza caratteri letterali diretti, se possibile, invece di convertire i codici ASCII con Chr per i caratteri comuni stampabili. Ad esempio, "" invece di Chr(34).

  4. Utilizza funzioni di stringa alternative: A volte, altre funzioni di stringa possono essere più efficienti di "Chr". Ad esempio, per creare una stringa ripetuta di un carattere, String(lunghezza, carattere) è più efficiente di un ciclo con Chr.Nel primo esempio, "Chr" viene chiamato 10.000 volte, mentre nel secondo esempio viene chiamato solo una volta e la funzione "String" viene utilizzata per replicare in modo efficiente il carattere di nuova riga.

    ' Esempio inefficiente (Chr in loop)Dim start_time As Doublestart_time = TimerDim longString_inefficient As StringFor i = 1 To 10000 longString_inefficient = longString_inefficient & Chr(10)Next iDebug.Print "Inefficiente: " & Timer - start_time & " secondi"' Esempio efficiente (Chr fuori loop con String)start_time = TimerDim longString_efficient As StringlongString_efficient = String(10000, Chr(10))Debug.Print "Efficiente: " & Timer - start_time & " secondi"
  5. Profila il tuo codice: Utilizza gli strumenti di profilazione di VBA per identificare i colli di bottiglia e capire dove le chiamate a Chr potrebbero rallentare il tuo script.

  6. Considera le funzionalità dell'applicazione host: Alcune applicazioni dispongono di funzioni integrate che potrebbero eliminare la necessità di Chr o fornire alternative più ottimizzate.

Seguendo queste migliori pratiche, puoi assicurarti che l'uso di "Chr" aggiunga carattere alla gestione del testo VBA senza compromettere le prestazioni.

Esempio di codice VBA con la funzione Chr

tags: #tabella #caratteri #ascii #chr