Qual è la differenza tra un personaggio, un punto di codice, un glifo e un grapheme?

Cercare di capire le sottigliezze del moderno Unicode mi fa male alla testa. In particolare, la distinzione tra punti di codice, caratteri, glifi e grafemi – concetti che nel caso più semplice , quando si tratta di testo inglese usando caratteri ASCII, hanno tutti una relazione uno a uno con l’altro – mi stanno causando problemi.

Vedendo come questi termini vengono usati in documenti come il JavaScript di Matthias Bynens ha un problema unicode o il pezzo di Wikipedia sull’unificazione di Han , ho capito che questi concetti non sono la stessa cosa e che è pericoloso confonderli, ma io sono un po ‘ lottando per capire cosa significa ogni termine.

Il Consorzio Unicode offre un glossario per spiegare questa roba, ma è pieno di “definizioni” come questa:

Carattere astratto Un’unità di informazioni utilizzate per l’organizzazione, il controllo o la rappresentazione di dati testuali. …

Carattere … (2) Sinonimo per carattere astratto. (3) L’unità di base della codifica per la codifica dei caratteri Unicode. …

Glifo . (1) Una forma astratta che rappresenta una o più immagini di glifo. (2) Un sinonimo per l’immagine glifo. Nella visualizzazione dei dati dei caratteri Unicode, uno o più glifi possono essere selezionati per rappresentare un particolare carattere.

Grapheme . (1) Un’unità di scrittura minimamente distintiva nel contesto di un particolare sistema di scrittura. …

La maggior parte di queste definizioni possiede la qualità di un suono molto accademico e formale, ma manca la qualità del significato di qualsiasi cosa , oppure rimanda il problema della definizione a un’altra voce di glossario o sezione dello standard.

Quindi cerco l’arcana saggezza di coloro che sono più istruiti di me. In che modo esattamente ciascuno di questi concetti differisce l’uno dall’altro e in quali circostanze non avrebbero una relazione uno-a-uno l’uno con l’altro?

  • Il carattere è un termine sovraccarico che può significare molte cose.

  • Un punto di codice è l’unità atomica di informazioni. Il testo è una sequenza di punti di codice. Ogni punto di codice è un numero a cui viene assegnato il significato dallo standard Unicode.

  • Un’unità di codice è l’unità di archiviazione di una parte di un punto di codice codificato. In UTF-8 questo significa 8-bit, in UTF-16 questo significa 16-bit. Una singola unità di codice può rappresentare un punto di codice completo o parte di un punto di codice. Ad esempio, il glifo pupazzo di neve ( ) è un singolo punto di codice ma 3 unità di codice UTF-8 e 1 unità di codice UTF-16.

  • Un grafema è una sequenza di uno o più punti di codice che vengono visualizzati come una singola unità grafica che un lettore riconosce come un singolo elemento del sistema di scrittura. Ad esempio, sia a che ä sono grafemi, ma possono essere costituiti da più punti di codice (ad esempio ä possono essere due punti di codice, uno per il carattere base a seguito da uno per la diaresi, ma c’è anche un codice alternativo, legacy, singolo punto che rappresenta questo grafema). Alcuni punti di codice non fanno mai parte di alcun grafema (es. Il non-falegname a larghezza zero o gli override direzionali).

  • Un glifo è un’immagine, solitamente memorizzata in un font (che è una raccolta di glifi), usata per rappresentare grafemi o parti di essi. I caratteri possono comporre più glifi in una singola rappresentazione, ad esempio, se quanto sopra ä è un singolo punto di codice, un font può scegliere di renderlo come due glifi separati, spazialmente sovrapposti. Per OTF, le tabelle GSUB e GPOS del font contengono informazioni di sostituzione e posizionamento per far funzionare questo. Un font può contenere più glifi alternativi per lo stesso grafema.

Al di fuori dello standard Unicode, un carattere è una singola unità di testo composta da uno o più grafemi . Quello che lo standard Unicode definisce come “personaggi” è in realtà un mix di grafemi e personaggi. Unicode fornisce regole per l’interpretazione di grafemi giustapposti come singoli caratteri.

Un punto di codice Unicode è un numero univoco assegnato a ciascun carattere Unicode (che è un carattere o un grafo).

Sfortunatamente, le regole Unicode consentono di interpretare alcuni grafi giustapposti come altri grafemi che hanno già i propri punti di codice ( moduli precomposti ). Ciò significa che in Unicode esiste più di un modo per rappresentare un personaggio. La normalizzazione Unicode risolve questo problema.

Un glifo è la rappresentazione visiva di un personaggio. Un font fornisce un set di glifi per un determinato set di caratteri (non caratteri Unicode). Per ogni personaggio, c’è un numero infinito di glifi possibili.

Una risposta a Mark Amery

Innanzitutto, come ho affermato, c’è un numero infinito di glifi possibili per ogni carattere, quindi no, un personaggio non è “sempre rappresentato da un singolo glifo”. Unicode non si occupa molto dei glifi, e le cose che definisce nei suoi diagrammi di codice non sono certamente glifi. Il problema è che non sono tutti personaggi. Quindi cosa sono?

Qual è l’ quadro maggiore, il grafema o il personaggio? Come si chiamano quegli elementi grafici nel testo che non sono lettere o punteggiatura? Un termine che viene subito in mente è “grafema”. È una parola che evoca esattamente l’idea di “un’unità grafica in un testo”. Offro questa definizione: un grafema è la più piccola componente distinta di un testo scritto .

Si potrebbe andare dall’altra parte e dire che i grafemi sono composti da personaggi, ma in seguito si chiamerebbero “grafemi cinesi” e tutti quei frammenti di grafemi cinesi sono composti da “personaggi”. Tuttavia, è tutto indietro. I grafemi sono i piccoli pezzi distintivi. I personaggi sono più sviluppati. La frase “i glifi sono componibili”, sarebbe meglio affermata nel contesto di Unicode come “i caratteri sono componibili”.

Unicode definisce i caratteri ma definisce anche grafemi che devono essere composti con altri grafemi o caratteri. Quelle mostruosità che hai composto ne sono un bell’esempio. Se si accorgono forse avranno i propri punti di codice in una versione successiva di Unicode;)

C’è un elemento ricorsivo a tutto questo. A livelli più alti, i grafemi diventano personaggi che diventano dei grafemi, ma sono i grafemi fino in fondo.