it-swarm.dev

Quantos caracteres podem ser mapeados com Unicode?

Estou pedindo a contagem de todas as possíveis combinações válidas no Unicode com explicação. Eu sei que um char pode ser codificado como 1,2,3 ou 4 bytes. Também não entendo por que os bytes de continuação têm restrições, embora o byte inicial desse caracter apague quanto tempo deve ser.

71
Ufuk Hacıoğulları

Estou solicitando a contagem de todas as possíveis combinações válidas no Unicode com explicação.

1.111.998 : 17 aviões × 65.536 caracteres por avião - 2048 substitutos - 66 não caracteres

Observe que UTF-8 e UTF-32 poderiam, teoricamente, codificar muito mais que 17 planos, mas o alcance é restrito com base no limitações da codificação UTF-16 .

109.384 pontos de código são realmente atribuídos em nicode 6. .

Também não entendo por que os bytes de continuação têm restrições, embora o byte inicial desse caracter apague quanto tempo deve ser.

O objetivo dessa restrição no UTF-8 é tornar a codificação auto-sincronizada .

Para um contra-exemplo, considere a codificação GB18030 em chinês. Lá, a letra ß é representada como a sequência de bytes 81 30 89 38, que contém a codificação dos dígitos 0 e 8. Portanto, se você tiver uma função de pesquisa de cadeia não projetada para essa peculiaridade específica da codificação, uma pesquisa pelo dígito 8 encontrará um falso positivo na letra ß.

Em UTF-8, isso não pode acontecer, porque a não sobreposição entre bytes iniciais e bytes de trilha garante que a codificação de um caractere mais curto nunca possa ocorrer dentro da codificação de um caractere mais longo.

99
dan04

O Unicode permite 17 planos , cada um dos 65.536 caracteres possíveis (ou 'pontos de código'). Isso fornece um total de 1.114.112 caracteres possíveis. Atualmente, apenas cerca de 10% desse espaço foi alocado.

Os detalhes precisos de como esses pontos de código são codificados diferem da codificação, mas sua pergunta faz parecer que você está pensando em UTF-8. Presumivelmente, o motivo das restrições nos bytes de continuação é portanto fácil de encontrar o início do próximo caractere (como os caracteres de continuação sempre têm o formato 10xxxxxx, mas o byte inicial nunca pode ter esse formato).

9
Simon Nickerson

O Unicode suporta 1.114.112 pontos de código. Existem 2048 pontos de código substitutos, fornecendo 1.112.064 valores escalares. Desses, existem 66 caracteres não, levando a 1.111.998 caracteres codificados possíveis (a menos que eu tenha cometido um erro de cálculo).

5
Philipp

Para dar uma resposta metaforicamente precisa, all of them.

Os bytes de continuação nas codificações UTF-8 permitem ressincronização do fluxo de octetos codificados em face do "ruído de linha". O codificador precisa apenas procurar um byte que não tenha um valor entre 0x80 e 0xBF para saber que o próximo byte é o início de um novo ponto de caractere.

Em teoria, as codificações usadas hoje permitem a expressão de caracteres cujo número de caracteres Unicode tem até 31 bits de comprimento. Na prática, essa codificação é realmente implementada em serviços como o Twitter, onde o tamanho máximo do Tweet pode codificar dados de até 4.340 bits. (140 caracteres [válido e inválido], vezes 31 bits cada.)

2
Andy Finkenstadt

Unicode não é uma codificação, é um mapeamento de caracteres. Segundo a Wikipedia, o Unicode atualmente contém 109242 caracteres distintos.

1
orlp

Unicode tem a quantidade hexadecimal de 110000, que é 1114112

0
Dmitry Pleshkov