Equivalência Unicode - Unicode equivalence

A equivalência Unicode é a especificação pelo padrão de codificação de caracteres Unicode de que algumas sequências de pontos de código representam essencialmente o mesmo caractere. Esse recurso foi introduzido no padrão para permitir a compatibilidade com conjuntos de caracteres padrão preexistentes , que geralmente incluíam caracteres semelhantes ou idênticos.

O Unicode fornece duas dessas noções, equivalência canônica e compatibilidade. As sequências de pontos de código definidas como canonicamente equivalentes são consideradas como tendo a mesma aparência e significado quando impressas ou exibidas. Por exemplo, o ponto de código U + 006E (o latim "n" minúsculo) seguido por U + 0303 (o til de combinação "◌̃") é definido por Unicode para ser canonicamente equivalente ao ponto de código único U + 00F1 (a minúscula letra " ñ " do alfabeto espanhol ). Portanto, essas sequências devem ser exibidas da mesma maneira, devem ser tratadas da mesma maneira por aplicativos como nomes em ordem alfabética ou pesquisa , e podem ser substituídas umas pelas outras. Da mesma forma, cada bloco de sílaba Hangul que é codificado como um único caractere pode ser codificado de forma equivalente como uma combinação de um jamo conjunto inicial, um jamo conjunto vogal e, se apropriado, um jamo conjunto final.

As sequências definidas como compatíveis são assumidas como tendo aparências possivelmente distintas, mas o mesmo significado em alguns contextos. Assim, por exemplo, o ponto de código U + FB00 (a ligadura tipográfica "ff") é definido para ser compatível - mas não canonicamente equivalente - à sequência U + 0066 U + 0066 (duas letras latinas "f"). Seqüências compatíveis podem ser tratadas da mesma maneira em alguns aplicativos (como classificação e indexação ), mas não em outros; e podem ser substituídos em algumas situações, mas não em outras. As sequências canonicamente equivalentes também são compatíveis, mas o oposto não é necessariamente verdadeiro.

A norma também define um procedimento de normalização de texto , denominado normalização Unicode , que substitui sequências equivalentes de caracteres de forma que quaisquer dois textos equivalentes sejam reduzidos à mesma sequência de pontos de código, denominada forma de normalização ou forma normal do texto original. Para cada uma das duas noções de equivalência, o Unicode define duas formas normais, uma totalmente composta (onde vários pontos de código são substituídos por pontos únicos sempre que possível) e uma totalmente decomposta (onde pontos únicos são divididos em vários).

Fontes de equivalência

Duplicação de personagem

Por compatibilidade ou outros motivos, o Unicode às vezes atribui dois pontos de código diferentes a entidades que são essencialmente o mesmo caractere. Por exemplo, o caractere "Å" pode ser codificado como U + 00C5 (nome padrão "LATIN MAIÚSCULA LETRA A COM ANEL ACIMA", uma letra do alfabeto em sueco e vários outros idiomas ) ou como U + 212B ("ANGSTROM SIGN" ) Ainda assim, o símbolo para angstrom é definido como aquela letra sueca, e a maioria dos outros símbolos que são letras (como "V" para volt ) não tem um ponto de código separado para cada uso. Em geral, os pontos de código de caracteres verdadeiramente idênticos (que podem ser renderizados da mesma maneira em fontes Unicode) são definidos para serem canonicamente equivalentes.

Combinação e caracteres pré-compostos

Para consistência com alguns padrões mais antigos, o Unicode fornece pontos de código únicos para muitos caracteres que podem ser vistos como formas modificadas de outros caracteres (como U + 00F1 para "ñ" ou U + 00C5 para "Å") ou como combinações de dois ou mais caracteres (como U + FB00 para a ligadura "ff" ou U + 0132 para a letra holandesa " IJ ")

Para consistência com outros padrões e para maior flexibilidade, o Unicode também fornece códigos para muitos elementos que não são usados ​​por conta própria, mas que devem ser modificados ou combinados com um caractere base anterior . Exemplos desses caracteres combinados são o til combinado e o dakuten diacrítico japonês ("◌ ゛", U + 3099).

No contexto do Unicode, composição de caracteres é o processo de substituir os pontos de código de uma letra base seguidos por um ou mais caracteres combinados em um único caractere pré-composto ; e a decomposição de caracteres é o processo oposto.

Em geral, os caracteres pré-compostos são definidos para serem canonicamente equivalentes à sequência de sua letra base e subsequentes marcas diacríticas de combinação, em qualquer ordem em que possam ocorrer.

Exemplo

Amélie com suas duas formas Unicode canonicamente equivalentes ( NFC e NFD )
Personagem NFC UMA m é eu eu e
Ponto de código NFC 0041 006d 00e9 006c 0069 0065
Ponto de código NFD 0041 006d 0065 0301 006c 0069 0065
Personagem NFD UMA m e ◌́ eu eu e

Não interação tipográfica

Alguns scripts usam regularmente várias marcas de combinação que, em geral, não interagem tipograficamente e não têm caracteres pré-compostos para as combinações. Pares de tais marcas não interagentes podem ser armazenados em qualquer ordem. Essas sequências alternativas são, em geral, canonicamente equivalentes. As regras que definem seu sequenciamento na forma canônica também definem se eles são considerados para interagir.

Convenções tipográficas

O Unicode fornece pontos de código para alguns caracteres ou grupos de caracteres que são modificados apenas por razões estéticas (como ligaduras , caracteres katakana de meia largura ou letras latinas de largura dupla para uso em textos japoneses) ou para adicionar novas semânticas sem perder o original (como dígitos em posições subscritas ou sobrescritas , ou os dígitos circulados (como "①") herdados de algumas fontes japonesas). Tal sequência é considerada compatível com a sequência de caracteres originais (individuais e não modificados), para o benefício de aplicativos em que a aparência e a semântica adicionada não são relevantes. No entanto, as duas sequências não são declaradas canonicamente equivalentes, uma vez que a distinção tem algum valor semântico e afeta a renderização do texto.

Erros de codificação

UTF-8 e UTF-16 (e também algumas outras codificações Unicode) não permitem todas as sequências possíveis de unidades de código . Softwares diferentes irão converter sequências inválidas em caracteres Unicode usando regras variadas, algumas das quais apresentam muitas perdas (por exemplo, transformar todas as sequências inválidas no mesmo caractere). Isso pode ser considerado uma forma de normalização e pode levar às mesmas dificuldades que os outros.

Normalização

A implementação de pesquisas e comparações de strings Unicode no software de processamento de texto deve levar em consideração a presença de pontos de código equivalentes. Na ausência desse recurso, os usuários que procuram uma sequência de ponto de código específica não conseguiriam encontrar outros glifos visualmente indistinguíveis que tenham uma representação de ponto de código diferente, mas canonicamente equivalente.

O Unicode fornece algoritmos de normalização padrão que produzem uma sequência de pontos de código exclusiva (normal) para todas as sequências equivalentes; os critérios de equivalência podem ser canônicos (NF) ou compatibilidade (NFK). Visto que se pode escolher arbitrariamente o elemento representativo de uma classe de equivalência , várias formas canônicas são possíveis para cada critério de equivalência. O Unicode fornece duas formas normais que são semanticamente significativas para cada um dos dois critérios de compatibilidade: as formas compostas NFC e NFKC e as formas decompostas NFD e NFKD. Ambas as formas compostas e decompostas impõem uma ordem canônica na sequência de pontos de código, que é necessária para que as formas normais sejam únicas.

Para comparar ou pesquisar strings Unicode, o software pode usar formas compostas ou decompostas; esta escolha não importa, desde que seja a mesma para todas as strings envolvidas em uma pesquisa, comparação, etc. Por outro lado, a escolha dos critérios de equivalência pode afetar os resultados da pesquisa. Por exemplo, algumas ligaduras tipográficas como U + FB03 (ffi), algarismos romanos como U + 2168 (Ⅸ) e até mesmo subscritos e sobrescritos , por exemplo, U + 2075 (⁵) têm seus próprios pontos de código Unicode. A normalização canônica (NF) não afeta nenhum deles, mas a normalização de compatibilidade (NFK) irá decompor a ligadura ffi nas letras constituintes, então uma busca por U + 0066 (f) como substring teria sucesso em uma normalização NFKC de U + FB03 mas não na normalização NFC de U + FB03. Da mesma forma, ao pesquisar a letra latina I (U + 0049) no algarismo romano pré-composto Ⅸ (U + 2168). Da mesma forma, o sobrescrito "⁵" (U + 2075) é transformado em "5" (U + 0035) pelo mapeamento de compatibilidade.

Entretanto, a transformação de sobrescritos em equivalentes de linha de base pode não ser apropriada para software rich text , porque as informações sobrescritas são perdidas no processo. Para permitir essa distinção, o banco de dados de caracteres Unicode contém marcas de formatação de compatibilidade que fornecem detalhes adicionais sobre a transformação de compatibilidade. No caso de ligaduras tipográficas, essa tag é simples <compat>, enquanto para o sobrescrito é <super>. Os padrões de rich text como HTML levam em consideração as tags de compatibilidade. Por exemplo, o HTML usa sua própria marcação para posicionar U + 0035 em uma posição sobrescrita.

Formas normais

As quatro formas de normalização Unicode e os algoritmos (transformações) para obtê-los estão listados na tabela abaixo.

Formulário de normalização NFD -
decomposição canônica
Os caracteres são decompostos por equivalência canônica e vários caracteres combinados são organizados em uma ordem específica.
Composição canônica do formulário de normalização NFC
Os caracteres são decompostos e depois recompostos por equivalência canônica.
Decomposição de compatibilidade de formulário de normalização NFKD
Os caracteres são decompostos por compatibilidade e vários caracteres combinados são organizados em uma ordem específica.
Composição de compatibilidade do formulário de normalização NFKC
Os caracteres são decompostos por compatibilidade e, em seguida, recompostos por equivalência canônica.

Todos esses algoritmos são transformações idempotentes , o que significa que uma string que já está em uma dessas formas normalizadas não será modificada se processada novamente pelo mesmo algoritmo.

Os formulários normais não são fechados na concatenação de strings . Para cadeias Unicode defeituosas começando com uma vogal Hangul ou jamo conjoining posterior , a concatenação pode quebrar a composição.

No entanto, eles não são injetivos (eles mapeiam diferentes glifos e sequências originais para a mesma sequência normalizada) e, portanto, também não são bijetivos (não podem ser restaurados). Por exemplo, as strings Unicode distintas "U + 212B" (o sinal de angstrom "Å") e "U + 00C5" (a letra sueca "Å") são ambas expandidas por NFD (ou NFKD) na sequência "U + 0041 U + 030A "(letra latina" A "e anel de combinação acima de " ° ") que é então reduzido por NFC (ou NFKC) para" U + 00C5 "(a letra sueca" Å ").

Um único caractere (diferente de um bloco de sílaba Hangul) que será substituído por outro na normalização pode ser identificado nas tabelas Unicode por ter um campo de compatibilidade não vazio, mas sem uma etiqueta de compatibilidade.

Ordenação canônica

A ordenação canônica preocupa-se principalmente com a ordenação de uma sequência de caracteres combinados. Para os exemplos nesta seção, presumimos que esses caracteres sejam diacríticos , embora, em geral, alguns diacríticos não sejam caracteres combinados e alguns caracteres combinados não sejam diacríticos.

O Unicode atribui a cada caractere uma classe combinada , que é identificada por um valor numérico. Os caracteres não combinados têm o número de classe 0, enquanto os caracteres combinados têm um valor de classe combinante positivo. Para obter a ordenação canônica, cada substring de caracteres com valor de classe de combinação diferente de zero deve ser classificada pelo valor de classe de combinação usando um algoritmo de ordenação estável . A classificação estável é necessária porque a combinação de caracteres com o mesmo valor de classe deve interagir tipograficamente, portanto, as duas ordens possíveis não são consideradas equivalentes.

Por exemplo, o caractere U + 1EBF (ế), usado em vietnamita , tem acento agudo e circunflexo. Sua decomposição canônica é a seqüência de três caracteres U + 0065 (e) U + 0302 (acento circunflexo) U + 0301 (acento agudo). As classes combinadas para os dois acentos são ambas 230, portanto, U + 1EBF não é equivalente a U + 0065 U + 0301 U + 0302.

Como nem todas as sequências combinadas têm um equivalente pré-composto (o último no exemplo anterior só pode ser reduzido para U + 00E9 U + 0302), mesmo a forma normal NFC é afetada pelo comportamento dos caracteres combinados.

Erros devido a diferenças de normalização

Quando dois aplicativos compartilham dados Unicode, mas os normalizam de maneira diferente, podem ocorrer erros e perda de dados. Em uma instância específica, o OS X normalizou os nomes de arquivo Unicode enviados do software de compartilhamento de arquivos e impressoras Samba . O Samba não reconheceu os nomes de arquivos alterados como equivalentes ao original, levando à perda de dados. Resolver esse problema não é trivial, pois a normalização não pode ser invertida sem perdas.

Veja também

Notas

Referências

links externos