Qual è la differenza tra ASCII e Unicode?

Posso conoscere la differenza esatta tra Unicode e ASCII?

ASCII ha un totale di 128 caratteri (256 nel set esteso).

Esiste una specifica sulle dimensioni per i caratteri Unicode?

ASCII definisce 128 caratteri, che mappano ai numeri 0-127. Unicode definisce (meno di) 2 21 caratteri, che, analogamente, mappano ai numeri 0-2 21 (sebbene non tutti i numeri siano attualmente assegnati e alcuni siano riservati).

Unicode è un superset di ASCII, e i numeri 0-128 hanno lo stesso significato in ASCII che hanno in Unicode. Ad esempio, il numero 65 significa “capitale latina” A “”.

Poiché i caratteri Unicode generalmente non si adattano a un byte da 8 bit, esistono numerosi metodi per archiviare i caratteri Unicode in sequenze di byte, come UTF-32 e UTF-8.

Capire perché sono stati creati ASCII e Unicode in primo luogo mi ha aiutato a capire come funzionano effettivamente.

ASCII, Origini

Come indicato nelle altre risposte, ASCII utilizza 7 bit per rappresentare un carattere. Usando 7 bit, possiamo avere un massimo di 2 ^ 7 (= 128) combinazioni distinte * . Ciò significa che possiamo rappresentare al massimo 128 caratteri.

Aspetta, 7 bit? Ma perché non 1 byte (8 bit)?

L’ultimo bit (8 °) viene utilizzato per evitare errori come bit di parità . Questo era rilevante anni fa.

La maggior parte dei caratteri ASCII sono caratteri stampabili dell’alfabeto come abc, ABC, 123,? & !, ecc. Gli altri sono caratteri di controllo come ritorno a capo, avanzamento riga , scheda, ecc.

Vedi sotto la rappresentazione binaria di alcuni caratteri in ASCII:

0100101 -> % (Percent Sign - 37) 1000001 -> A (Capital letter A - 65) 1000010 -> B (Capital letter B - 66) 1000011 -> C (Capital letter C - 67) 0001101 -> Carriage Return (13) 

Guarda la tabella ASCII completa qui .

ASCII era pensato solo per l’inglese.

Che cosa? Perché solo l’inglese? Così tante lingue là fuori!

Perché il centro dell’industria informatica era negli Stati Uniti in quel momento. Di conseguenza, non avevano bisogno di sostenere accenti o altri segni come á, ü, ç, ñ, ecc. (Alias ​​segni diacritici ).

ASCII esteso

Alcune persone intelligenti hanno iniziato a utilizzare l’ottavo bit (il bit utilizzato per la parità) per codificare più caratteri per supportare la loro lingua (per supportare “é”, in francese, ad esempio). Basta usare un bit in più per raddoppiare la dimensione della tabella ASCII originale per mappare fino a 256 caratteri (2 ^ 8 = 256 caratteri). E non 2 ^ 7 come prima (128).

 10000010 -> é (e with acute accent - 130) 10100000 -> á (a with acute accent - 160) 

Il nome per questo “ASCII esteso a 8 bit e non 7 bit come prima” potrebbe essere definito semplicemente “ASCII esteso” o “ASCII a 8 bit”.

Come @Tom ha sottolineato nel suo commento qui sotto non esiste un ” ASCII esteso “, ma questo è un modo semplice per riferirsi a questo trucco dell’8 ° bit. Esistono molte varianti della tabella ASCII a 8 bit, ad esempio la ISO 8859-1, chiamata anche ISO Latin-1 .

Unicode, The Rise

ASCII Extended risolve il problema delle lingue basate sull’alfabeto latino … e gli altri che hanno bisogno di un alfabeto completamente diverso? Greco? Russo? Cinese e simili?

Avremmo avuto bisogno di un set di caratteri completamente nuovo … questo è il razionale dietro Unicode. Unicode non contiene tutti i caratteri di ogni lingua, ma sicuramente contiene una quantità enorme di caratteri ( vedi questa tabella ).

Non è ansible salvare il testo sul disco rigido come “Unicode”. Unicode è una rappresentazione astratta del testo. Devi “codificare” questa rappresentazione astratta. È qui che entra in gioco una codifica .

Codifiche: UTF-8 rispetto a UTF-16 rispetto a UTF-32

Questa risposta fa un ottimo lavoro nello spiegare le basi:

  • UTF-8 e UTF-16 sono codifiche di lunghezza variabile.
  • In UTF-8, un personaggio può occupare un minimo di 8 bit.
  • In UTF-16, una lunghezza di carattere inizia con 16 bit.
  • UTF-32 è una codifica a lunghezza fissa di 32 bit.

UTF-8 utilizza il set ASCII per i primi 128 caratteri. Questo è utile perché significa che il testo ASCII è valido anche in UTF-8.

mnemonics:

  • UTF- 8 : minimo 8 bit.
  • UTF- 16 : minimo 16 bit.
  • UTF- 32 : minimo e massimo 32 bit.

Nota:

Perché 2 ^ 7?

Questo è ovvio per alcuni, ma per ogni evenienza. Abbiamo sette slot disponibili con 0 o 1 ( codice binario ). Ciascuno può avere due combinazioni. Se abbiamo sette punti, abbiamo 2 * 2 * 2 * 2 * 2 * 2 * 2 = 2 ^ 7 = 128 combinazioni. Pensa a questo come una serratura a combinazione con sette ruote, ciascuna delle quali ha solo due numeri.

Fonte: Wikipedia e questo bellissimo post sul blog .

ASCII ha 128 code point, da 0 a 127. Può essere contenuto in un singolo byte da 8 bit, i valori da 128 a 255 tendono ad essere utilizzati per altri caratteri. Con le scelte incompatibili, causando il disastro della pagina di codice . Il testo codificato in una tabella codici non può essere letto correttamente da un programma che assume o indovina un’altra pagina di codice.

Unicode è venuto a risolvere questo disastro. La versione 1 è iniziata con 65536 punti di codice, comunemente codificati in 16 bit. Successivamente esteso nella versione da 2 a 1,1 milioni di punti di codice. La versione corrente è 6.3, utilizzando 110.187 dei 1.1 milioni di punti di codice disponibili. Questo non si adatta più a 16 bit.

La codifica a 16 bit era comune quando la v2 si avvicinava, ad esempio utilizzata dai sistemi operativi Microsoft e Apple. E i tempi di linguaggio come Java. La specifica v2 ha trovato un modo per mappare questi 1,1 milioni di punti di codice in 16 bit. Una codifica chiamata UTF-16, una codifica di lunghezza variabile in cui un punto di codice può prendere 2 o 4 byte. I punti di codice v1 originali prendono 2 byte, quelli aggiunti prendono 4.

Un’altra codifica a lunghezza variabile molto comune, utilizzata nei sistemi operativi e negli strumenti * nix è UTF-8, un punto di codice può richiedere da 1 a 4 byte, i codici ASCII originali richiedono 1 byte, il resto richiede più tempo. L’unica codifica di lunghezza non variabile è UTF-32, richiede 4 byte per un punto di codice. Non usato spesso poiché è abbastanza dispendioso. Ce ne sono altri, come UTF-1 e UTF-7, ampiamente ignorati.

Un problema con le codifiche UTF-16/32 è che l’ordine dei byte dipenderà dalla endianità della macchina che ha creato il stream di testo. Quindi aggiungi al mix UTF-16BE, UTF-16LE, UTF-32BE e UTF-32LE.

Avere queste diverse scelte di codifica riporta in qualche misura il disastro della code page, insieme a accesi dibattiti tra i programmatori che la scelta UTF è “migliore”. La loro associazione con le impostazioni predefinite del sistema operativo praticamente traccia le linee. Una contromisura è la definizione di una BOM, il Byte Order Mark, un punto di codice speciale (U + FEFF, spazio a larghezza zero) all’inizio di un stream di testo che indica come il resto del stream è codificato. Indica sia la codifica UTF che l’endianess ed è neutrale rispetto a un motore di rendering di testo. Sfortunatamente è opzionale e molti programmatori rivendicano il loro diritto di ometterlo, quindi gli incidenti sono ancora piuttosto comuni.

ASCII ha 128 posizioni di codice, assegnate a caratteri grafici e caratteri di controllo (codici di controllo).

Unicode ha 1.114.112 posizioni di codice. Circa 100.000 di questi sono stati assegnati ai personaggi, e molti punti di codice sono stati resi permanentemente non caratteri (cioè non usati per codificare mai un personaggio), e la maggior parte dei punti di codice non sono ancora stati assegnati.

Le uniche cose che ASCII e Unicode hanno in comune sono: 1) Sono codici di caratteri. 2) Le 128 prime posizioni di codice di Unicode sono state definite per avere lo stesso significato di ASCII, tranne per il fatto che le posizioni di codice dei caratteri di controllo ASCII sono appena definite come denotanti caratteri di controllo, con nomi corrispondenti ai loro nomi ASCII, ma i loro significati sono non definito in Unicode.

A volte, tuttavia, Unicode è caratterizzato (anche nello standard Unicode!) Come “wide ASCII”. Questo è uno slogan che cerca principalmente di trasmettere l’idea che Unicode debba essere un codice di carattere universale allo stesso modo di ASCII (sebbene il repertorio di caratteri di ASCII fosse irrimediabilmente insufficiente per l’uso universale), al contrario di usare codici diversi in diversi sistemi e applicazioni e per diverse lingue.

Unicode in quanto tale definisce solo la “dimensione logica” dei caratteri: ogni carattere ha un numero di codice in un intervallo specifico. Questi numeri di codice possono essere presentati utilizzando diverse codifiche di trasferimento e internamente, in memoria, i caratteri Unicode vengono solitamente rappresentati utilizzando una o due quantità a 16 bit per carattere, a seconda dell’intervallo di caratteri, a volte utilizzando una quantità a 32 bit per carattere.

java fornisce supporto per Unicode, ovvero supporta tutti gli alfabeti in tutto il mondo. Quindi la dimensione del char in java è di 2 byte. E l’intervallo è compreso tra 0 e 65535.

inserisci la descrizione dell'immagine qui

ASCII e Unicode sono due codifiche di caratteri. Fondamentalmente, sono standard su come rappresentare i caratteri di differenza in binario in modo che possano essere scritti, archiviati, trasmessi e letti nei media digitali. La differenza principale tra i due è nel modo in cui codificano il carattere e il numero di bit che usano per ciascuno. ASCII originariamente utilizzava sette bit per codificare ciascun carattere. Questo è stato successivamente aumentato a otto con ASCII esteso per affrontare l’apparente inadeguatezza dell’originale. Al contrario, Unicode utilizza un programma di codifica a bit variabile in cui è ansible scegliere tra codifiche a 32, 16 e 8 bit. L’utilizzo di più bit consente di utilizzare più caratteri a scapito di file più grandi, mentre meno bit offrono una scelta limitata, ma si risparmia molto spazio. Usare meno bit (ad es. UTF-8 o ASCII) sarebbe probabilmente la cosa migliore se si codifica un documento di grandi dimensioni in inglese.

Uno dei motivi principali per cui Unicode era il problema derivava da molti programmi ASCII estesi non standard. A meno che non si stia utilizzando la pagina prevalente, che viene utilizzata da Microsoft e dalla maggior parte delle altre società di software, è probabile che si verifichino problemi con i caratteri visualizzati come caselle. Unicode elimina virtualmente questo problema poiché tutti i punti del codice carattere erano standardizzati.

Un altro importante vantaggio di Unicode è che al massimo può ospitare un numero enorme di personaggi. Per questo motivo, Unicode attualmente contiene la maggior parte delle lingue scritte e ha ancora spazio per ancora di più. Questo include tipici script da sinistra a destra come l’inglese e persino script da destra a sinistra come l’arabo. Cinese, giapponese e molte altre varianti sono anche rappresentate all’interno di Unicode. Quindi Unicode non verrà sostituito in qualsiasi momento.

Al fine di mantenere la compatibilità con l’ASCII più vecchio, che era già ampiamente utilizzato al momento, Unicode è stato progettato in modo tale che i primi otto bit corrispondessero a quelli della pagina ASCII più popolare. Quindi se apri un file ASCII codificato con Unicode, ottieni comunque i caratteri corretti codificati nel file. Ciò ha facilitato l’adozione di Unicode in quanto ha ridotto l’impatto dell’adozione di un nuovo standard di codifica per coloro che stavano già utilizzando ASCII.

Sommario:

 1.ASCII uses an 8-bit encoding while Unicode uses a variable bit encoding. 2.Unicode is standardized while ASCII isn't. 3.Unicode represents most written languages in the world while ASCII does not. 4.ASCII has its equivalent within Unicode. 

Tratto da: http://www.differencebetween.net/technology/software-technology/difference-between-unicode-and-ascii/#ixzz4zEjnxPhs

ASCII definisce 128 caratteri, poiché Unicode contiene un repertorio di oltre 120.000 caratteri.