Fora do padrão Unicode, um caractere é uma unidade individual de texto composta por um ou mais grafemas . O que o padrão Unicode define como "caracteres" é na verdade uma mistura de grafemas e caracteres. O Unicode fornece regras para a interpretação de grafemas justapostos como caracteres individuais.
Um ponto de código Unicode é um número exclusivo atribuído a cada caractere Unicode (que é um caractere ou um grafema).
Infelizmente, as regras Unicode permitem que alguns grafemas justapostos sejam interpretados como outros grafemas que já possuem seus próprios pontos de código ( formas pré-compostas ). Isso significa que há mais de uma maneira no Unicode para representar um caractere. A normalização Unicode soluciona esse problema.
Um glifo é a representação visual de um personagem. Uma fonte fornece um conjunto de glifos para um determinado conjunto de caracteres (não caracteres Unicode). Para cada personagem, existe um número infinito de possíveis glifos.
Uma resposta a Mark Amery
Primeiro, como afirmei, há um número infinito de possíveis glifos para cada caractere, portanto não, um caractere nem sempre é "representado por um único glifo". O Unicode não se preocupa muito com glifos, e as coisas que define em seus gráficos de código certamente não são glifos. O problema é que nem todos são personagens. Então, o que são eles?
Qual é a entidade maior, o grafema ou o personagem? Como se chama esses elementos gráficos no texto que não são letras ou pontuação? Um termo que vem à mente rapidamente é "grafema". É uma palavra que evoca precisamente a idéia de "uma unidade gráfica em um texto". Ofereço esta definição: Um grafema é o menor componente distinto de um texto escrito .
Pode-se dizer o contrário e dizer que os grafemas são compostos de caracteres, mas então eles seriam chamados de "grafemas chineses", e todos esses pedaços de grafemas chineses são compostos de caracteres. No entanto, isso é tudo ao contrário. Os grafemas são os pequenos pedaços distintos. Os personagens são mais desenvolvidos. A frase "glifos são compostáveis" seria mais bem definida no contexto do Unicode como "caracteres são composíveis".
Unicode define caracteres, mas também define grafemas que devem ser compostos com outros grafemas ou caracteres. Essas monstruosidades que você compôs são um bom exemplo disso. Se eles entenderem, talvez tenham seus próprios pontos de código em uma versão posterior do Unicode;)
Há um elemento recursivo nisso tudo. Em níveis mais altos, grafemas se tornam personagens, mas são grafemas até o fim.
Uma resposta para TS
O capítulo 1 do padrão declara: "A codificação de caracteres Unicode trata os caracteres alfabéticos, ideográficos e símbolos de maneira equivalente, o que significa que eles podem ser usados em qualquer mistura e com a mesma facilidade". Dada essa afirmação, devemos estar preparados para alguma conflilação de termos na norma. Às vezes, a terminologia adequada apenas se torna clara em retrospecto à medida que um padrão se desenvolve.
Muitas vezes acontece nas definições formais de uma linguagem que duas coisas fundamentais são definidas em termos uma da outra. Por exemplo, em
XML, um elemento é definido como uma tag inicial, possivelmente seguida pelo conteúdo, seguida por uma tag final. O conteúdo é definido por sua vez como um elemento, dados de caracteres ou algumas outras coisas possíveis. Um padrão de definições autorreferenciais também está implícito no padrão Unicode:
Um grafema é um ponto de código ou um caractere.
Um personagem é composto de uma sequência de um ou mais grafemas.
Quando confrontado pela primeira vez com essas duas definições, o leitor pode se opor à primeira definição, alegando que um ponto de código é um caractere, mas isso nem sempre é verdade. Às vezes, uma sequência de dois pontos de código codifica um único ponto de código sob
normalização , e esse ponto de código codificado representa o caractere, conforme ilustrado na
figura 2.7 . Sequências de pontos de código que codificam outros pontos de código. Isso está ficando um pouco complicado e nem chegamos à camada em que esquemas de codificação de caracteres como UTF-8 são usados para codificar pontos de código em sequências de bytes.
Em alguns contextos, por exemplo, um artigo acadêmico sobre
diacríticos e parte individual de um personagem podem aparecer no texto por si só. Nesse contexto, a parte do caractere individual pode ser considerada um caractere; portanto, faz sentido que o padrão Unicode também permaneça flexível.
Como Mark Avery apontou, um personagem pode ser composto em uma coisa mais complexa. Ou seja, cada personagem pode servir como um grafema, se desejado. O resultado final de toda composição é algo que "o usuário considera como um personagem". Não parece haver nenhuma resistência real, nem no padrão nem nesta discussão, à idéia de que, no nível mais alto, exista no texto essas coisas que o usuário considera como caracteres individuais. Para evitar sobrecarregar esse termo, podemos usar "grafema" em todos os casos em que queremos nos referir às partes usadas para compor um personagem.
Às vezes, o padrão Unicode está em todo lugar com sua terminologia. Por exemplo, o Capítulo 3
define UTF-8 como uma "forma de codificação", enquanto o glossário define "forma de codificação" como outra coisa, e UTF-8 como um "Esquema de codificação de caracteres". Outro exemplo é "Grapheme_Base" e "Grapheme_Extend", que são reconhecidos como erros, mas que persistem porque limpá-los é um pouco de uma tarefa. Ainda há trabalho a ser feito para reforçar a terminologia empregada pelo padrão.
A proposta de adição de COMBINING GRAPHEME JOINER errou ao afirmar que "Grafemas são sequências de um ou mais caracteres codificados que correspondem ao que os usuários consideram caracteres". Em vez disso, deveria ler: "Uma sequência de um ou mais grafemas compõe o que o usuário considera um personagem". Em seguida, poderia usar o termo "sequência de grafema" distintamente do termo "sequência de caracteres". Ambos os termos são úteis. "sequência do grafema" implica ordenadamente o processo de construção de um personagem a partir de pedaços menores. "sequência de caracteres" significa o que todos nós normalmente entendemos que significa: "Uma sequência de coisas que o usuário considera como caracteres".
Às vezes, um programador realmente deseja operar no nível das seqüências de grafema, portanto, mecanismos para inspecionar e manipular essas seqüências devem estar disponíveis, mas geralmente, ao processar o texto, é suficiente operar em "sequências de caracteres" (o que o usuário pensa como um personagem) e deixe o sistema gerenciar os detalhes de nível inferior.
Em todos os casos abordados até agora nesta discussão, é mais fácil usar "grafema" para se referir aos componentes indivisíveis e "caráter" para se referir à entidade composta. Esse uso também reflete melhor os significados estabelecidos há muito tempo de ambos os termos.