O UTF-8 seria capaz de suportar a inclusão de uma vasta língua alienígena com milhões de novos personagens?

86

No caso de uma invasão alienígena ter ocorrido e fomos forçados a oferecer suporte a seus idiomas em todos os nossos sistemas de computadores existentes, O UTF-8 é projetado de maneira a permitir sua quantidade possivelmente grande de caracteres?

(Claro, nós não sabemos se os alienígenas realmente têm línguas, se ou como eles se comunicam, mas por causa do argumento, por favor, imaginem).

Por exemplo, se o idioma deles consistisse em milhões de novos glifos, símbolos e / ou caracteres combinados , poderia UTF -8 teoricamente ser expandido de uma forma não quebra para incluir esses novos glifos e ainda suportar todos os softwares existentes?

Estou mais interessado em saber se os glifos superaram as limitações de tamanho atuais e precisaram de mais bytes para representar um único glifo. No caso de o UTF-8 não ser não expandido, isso prova que a única vantagem sobre o UTF-32 é simplesmente o tamanho dos caracteres inferiores?

    
por Qix 24.11.2015 / 13:18
fonte

5 respostas

109

O padrão Unicode tem muito espaço de sobra. Os pontos de código Unicode são organizados em "planos" e "blocos". De um total de 17 aviões, existem 11 atualmente não atribuídos . Cada avião possui 65.536 caracteres, então há, realisticamente, meio milhão de pontos de código de sobra para uma língua alienígena (a menos que preencha tudo isso com mais emojis antes do primeiro contato). A partir do Unicode 8.0, apenas 120.737 pontos de código foram atribuídos no total (aproximadamente 10% da capacidade total), com aproximadamente a mesma quantidade sendo não designada, mas reservada para uso particular específico do aplicativo. No total, 974.530 pontos de código não são atribuídos.

O UTF-8 é uma codificação específica do Unicode e está atualmente limitado a quatro octetos (bytes) por ponto de código, o que corresponde às limitações do UTF-16. Em particular, o UTF-16 suporta apenas 17 planos. Anteriormente, o UTF-8 suportava 6 octetos por ponto de código e foi projetado para suportar 32768 planos. Em princípio, esse limite de 4 bytes poderia ser eliminado, mas isso quebraria a estrutura organizacional atual do Unicode, e exigiria que o UTF-16 fosse eliminado - o que provavelmente não acontecerá em um futuro próximo, considerando o quanto está arraigado em determinados sistemas operacionais e programação idiomas.

O único motivo pelo qual o UTF-16 ainda é de uso comum é que ele é uma extensão da codificação UCS-2 com falhas, que suportava apenas um único plano Unicode. Caso contrário, ele herda propriedades indesejáveis de UTF-8 (não de largura fixa) e UTF-32 (não compatível com ASCII, desperdício de espaço para dados comuns) e exige que as marcas de ordem de byte declarem endianness. Dado que, apesar desses problemas, o UTF-16 ainda é popular, não estou muito otimista de que isso vá mudar muito em breve. Com sorte, nossos novos Senhores Supremos verão esse impedimento à sua regra e, em Sua sabedoria, banirão a UTF-16 da face da Terra. .

    
por 24.11.2015 / 13:48
fonte
30

Se o UTF-8 for realmente estendido, devemos olhar para o máximo absoluto que ele poderia representar. O UTF-8 é estruturado assim:

Char. number range  |        UTF-8 octet sequence
   (hexadecimal)    |              (binary)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

(descaradamente copiado do RFC .) Vemos que o primeiro byte sempre controla quantos seguidores -up bytes compõem o caractere atual.

Se estendemos para permitir até 8 bytes, obtemos as representações não-Unicode adicionais

111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
11111110 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
11111111 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

Calculando as representações máximas possíveis que essa técnica permite, chegamos a

  10000000₂
+ 00100000₂ * 01000000₂
+ 00010000₂ * 01000000₂^2
+ 00001000₂ * 01000000₂^3
+ 00000100₂ * 01000000₂^4
+ 00000010₂ * 01000000₂^5
+ 00000001₂ * 01000000₂^6
+ 00000001₂ * 01000000₂^7

ou na base 10:

  128
+  32 * 64
+  16 * 64^2
+   8 * 64^3
+   4 * 64^4
+   2 * 64^5
+   1 * 64^6
+   1 * 64^7

que nos dá a quantidade máxima de representações como 4.468.982.745.216.

Então, se esses 4 bilhões ( ou trilhões, como você quiser ) forem suficientes para representar os idiomas alienígenas, eu Tenho certeza de que podemos, com o mínimo de esforço, estender o atual UTF-8 para agradar nossos novos senhores alienígenas;)

    
por 24.11.2015 / 17:21
fonte
7

RFC3629 restringe o UTF-8 a um máximo de quatro bytes por caractere, com um valor máximo de 0x10FFFF, permitindo um máximo de 1.112.064 pontos de código. Obviamente, essa restrição poderia ser removida e o padrão estendido, mas isso provaria uma mudança para o código existente que funciona com esse limite.

Do ponto de vista do arquivo de dados, isso não seria uma alteração, já que o padrão funciona na base de que, se o bit mais significativo (MSB) de cada byte for definido, o próximo byte é parte do codificação. Mesmo antes do RFC3629, o padrão era limitado a 31 bits, deixando o MSB do quarto byte não definido.

Estender o padrão além de 0x10FFFF quebraria a compatibilidade de dados parciais do UTF-8 com o UTF-16.

    
por 24.11.2015 / 13:25
fonte
4

Realmente, apenas 2 códigos de pontos de código Unicode representam infinitamente muitos glifos, se eles estiverem combinando caracteres.

Compare, por exemplo, as duas formas que o Unicode codifica para o alfabeto Hangul coreano: Sílabas Hangul e Hangul Jamo . O caractere 웃 em Hangul Syllabels é o único ponto de código C6C3 , enquanto em Hangul Jamo são os três pontos de código 110B (ㅇ) 116E (ㅜ) 11B9 (ㅅ). Obviamente, usar caracteres combinados ocupa muito menos pontos de código, mas é menos eficiente para escrever, porque são necessários mais bytes para escrever cada caractere.

Com este truque, não há necessidade de ir além do número de pontos de código que podem ser atualmente codificados em UTF-8 ou UTF-16.

Acho que se trata de quão ofendidos seriam os alienígenas se a linguagem deles exigisse muito mais bytes por mensagem do que os idiomas terrenos. Se eles não se importam, digamos, representar cada um dos seus milhões de personagens usando uma mistura de caracteres combinando 100k, então não há problema; por outro lado, se ser forçado a usar mais bytes do que os terráqueos faz com que eles se sintam como cidadãos de segunda classe, poderíamos estar em algum conflito ( não diferente do que já observamos com UTF-8 ).

    
por 24.11.2015 / 21:18
fonte
-2

Editar: a pergunta agora diz "milhões de novos caracteres". Isso facilita a resposta:

Não . Utf-8 é uma codificação Unicode. Unicode tem um espaço de código que permite 1,114,112 pontos de código distintos , e menos de um milhão está atualmente não atribuído. Portanto, não é possível suportar milhões de novos caracteres no Unicode. Por definição, nenhuma codificação Unicode pode suportar mais caracteres do que o definido pelo Unicode. (Claro que você pode trapacear codificando um nível a mais - qualquer tipo de dado pode ser representado por apenas dois caracteres).

Para responder à pergunta original:

O Unicode não suporta idiomas como tal, ele suporta caracteres - símbolos usados para representar o idioma em forma escrita.

Nem todas as linguagens humanas têm uma representação escrita, portanto nem todas as linguagens humanas podem ser suportadas pelo Unicode. Além disso, muitos animais se comunicam, mas não possuem uma linguagem escrita. As baleias, por exemplo, têm uma forma de comunicação que é complexa o suficiente para chamar uma língua, mas não tem nenhuma forma escrita (e também não pode ser capturada pela notação fonética existente). Portanto, nem todos os idiomas do mundo podem ser suportados pelo Unicode.

Ainda pior é algo como a linguagem das abelhas. Não só não tem uma forma escrita, como não pode ser representada de forma significativa em forma escrita. A linguagem é um tipo de dança que basicamente aponta em uma direção, mas depende da posição atual do sol. Portanto, a dança só tem valor informativo no lugar e hora em que é realizada. Uma representação simbólica ou textual teria que incluir informações (localização, posição do sol) que a linguagem das abelhas atualmente não pode expressar.

Mesmo uma forma de comunicação escrita ou simbólica pode não ser possível representar em Unicode. Por exemplo, ilustrações ou quadrinhos sem palavras não podem ser suportados pelo Unicode, pois o conjunto de glifos não é finito. Você notará muita comunicação pictórica em ambientes internacionais como um aeroporto, por isso não é inconcebível que uma raça de alienígenas viajando pelo espaço tenha evoluído para usar uma linguagem pictórica.

Mesmo que uma raça alienígena tenha uma linguagem com um sistema de escrita com um conjunto finito de símbolos, talvez não seja possível suportar esse sistema no Unicode. O Unicode espera que a escrita seja uma seqüência linear de símbolos. A notação musical é um exemplo de um sistema de escrita que não pode ser totalmente representado no Unicode, porque o significado é codificado tanto na escolha dos símbolos quanto no posicionamento vertical e horizontal. (Unicode suporta símbolos musicais individuais, mas não pode codificar uma partitura.) Uma raça alienígena que se comunicava usando música polifônica (não incomum) ou um canal de comunicação de complexidade similar, poderia muito bem ter um sistema de escrita parecendo uma partitura orquestral, e O Unicode não pode suportar isso.

Mas vamos admitir, por uma questão de argumento, que todas as linguagens, mesmo as línguas alienígenas, podem ser expressas como uma sequência linear de símbolos selecionados a partir de um conjunto finito. O Unicode é grande o suficiente para uma invasão alienígena? Unicode tem atualmente menos de um milhão de pontos de código não atribuídos. O idioma chinês contém cem mil caracteres de acordo com o dicionário chinês mais abrangente (nem todos são atualmente suportados pelo Unicode como caracteres distintos). Portanto, apenas dez idiomas com a complexidade do chinês usariam todo o Unicode. Na Terra, temos centenas de sistemas de escrita distintos, mas, felizmente, a maioria é alfabética em vez de ideográfica e, portanto, contém um pequeno número de caracteres. Se todas as linguagens escritas usassem ideogramas como o chinês, o Unicode nem seria grande o suficiente para a Terra. O uso de alfabetos é derivado da fala, que usa apenas um número limitado de fonemas, mas isso é particular para a fisiologia humana. Assim, mesmo um único planeta alienígena com apenas uma dúzia de sistemas de escrita ideográficos pode exceder o que o Unicode pode suportar. Agora, considere se esse alien já invadiu outros planetas antes da Terra e incluiu seus sistemas de escrita no conjunto de caracteres que precisam ser suportados.

A expansão ou modificação das codificações atuais ou a introdução de novas codificações não resolverão isso, já que a limitação está no número de pontos de código suportados pelo Unicode.

Então a resposta é provavelmente não.

    
por 24.11.2015 / 20:26
fonte

Tags