No caso de uma invasão alienígena e fomos forçados a suportar seus idiomas em todos os nossos sistemas de computadores existentes, o UTF-8 foi projetado de maneira a permitir sua quantidade possivelmente vasta de caracteres?
(Obviamente, não sabemos se os alienígenas realmente têm idiomas, se ou como eles se comunicam, mas, pelo bem do argumento, imagine-o.)
Por exemplo, se a linguagem deles consistisse em milhões de novos glifos, símbolos e / ou caracteres combinados , o UTF-8 poderia ser teoricamente expandido de maneira ininterrupta para incluir esses novos glifos e ainda suportar todos os softwares existentes?
Estou mais interessado em saber se os glifos ultrapassaram as limitações de tamanho atuais e exigiram mais bytes para representar um único glifo. Caso o UTF-8 não possa ser expandido, isso prova que a única vantagem sobre o UTF-32 é simplesmente o tamanho de caracteres inferiores?
Respostas:
O padrão Unicode tem muito espaço de sobra. Os pontos de código Unicode são organizados em "planos" e "blocos". Do 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 um idioma alienígena (a menos que preenchamos tudo isso com mais emoticons 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 quantia sendo não atribuída, mas reservada para uso privado e específico de aplicativo. No total, 974.530 pontos de código não foram atribuídos.
UTF-8 é uma codificação específica de Unicode e atualmente está limitada a quatro octetos (bytes) por ponto de código, que corresponde às limitações de UTF-16. Em particular, o UTF-16 suporta apenas 17 aviões. Anteriormente, o UTF-8 suportava 6 octetos por ponto de código e foi projetado para suportar 32768 aviões. Em princípio, esse limite de 4 bytes poderia ser aumentado, mas isso quebraria a estrutura organizacional atual do Unicode e exigiria a eliminação progressiva do UTF-16 - é improvável que isso aconteça em um futuro próximo, considerando o grau de entrincheiramento em certos sistemas operacionais e programação línguas.
O único motivo pelo qual o UTF-16 ainda é de uso comum é que é uma extensão da codificação UCS-2 defeituosa que suportava apenas um único plano Unicode. Caso contrário, herda propriedades indesejáveis do 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 requer marcas de ordem de bytes para declarar endianness. Dado que, apesar desses problemas, o UTF-16 ainda é popular, não estou muito otimista de que isso mudará por si só muito em breve. Felizmente, nossos novos Overlords Estrangeiros verão esse impedimento ao Seu governo, e em Sua sabedoria banirão o UTF-16 da face da terra .
fonte
wfopen
syscall ou qualquer outra coisa, é UTF8 todo o caminho. Inferno, mesmo Python e Java - ambos que definem cadeias de caracteres como UTF-16 devido a razões históricas - não armazenam cadeias de caracteres como UTF-16, exceto quando necessário. a memória é cara, a CPU é barata). O mesmo vale para o Android - o JString do NDK é UTF8, principalmente porque os engenheiros do Google não são loucos.Se o UTF-8 for realmente estendido, devemos considerar o máximo absoluto que ele poderia representar. UTF-8 está estruturado da seguinte maneira:
(copiado descaradamente da RFC .) Vemos que o primeiro byte sempre controla quantos bytes de acompanhamento formam o caractere atual.
Se o estendermos para permitir até 8 bytes, obteremos as representações não-Unicode adicionais
Calculando o máximo de representações possíveis que essa técnica permite, chegamos a
ou na base 10:
o que nos dá a quantidade máxima de representações em 4.468.982.745.216.
Portanto, se esses 4 bilhões de caracteres ( ou trilhões, como quiser ) forem suficientes para representar os idiomas alienígenas, tenho certeza de que podemos, com o mínimo de esforço, estender o UTF-8 atual para agradar nossos novos senhores alienígenas ;-)
fonte
111111xx
como um primeiro byte possível, seguido por cinco bytes de extensão para um máximo de 2³² pontos de código. Mas isso é compatível apenas com a definição mencionada para os primeiros 2 pontos de código.F4 8F BF BF
em bytes UTF-8). Então, tudo o que menciono aqui além disso é pura especulação. Obviamente, alguém poderia pensar em outras extensões, nas quais um primeiro byte alto significa alguma outra estrutura a seguir (e espero que não destrua a sincronização automática no processo). Tentei concluir o esquema de bytes o mais próximo possível do UTF-8 real.FF
apresenta uma unidade de código de 13 bytes capaz de armazenar 72 bits. Qualquer coisa acima de 2 ^ 36 é uniformemente muito cara, mas permite codificar um int de 64 bits e mais alguns.RFC3629 restringe 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 de quebra no código existente que funciona até esse limite.
Do ponto de vista do arquivo de dados, isso não seria uma mudança de ruptura, pois o padrão funciona com base no fato de que, se o bit mais significativo (MSB) de cada byte for definido, o próximo byte fará parte da codificação. Mesmo antes do RFC3629, o padrão era limitado a 31 bits, deixando o MSB do quarto byte desativado.
Estender o padrão além de 0x10FFFF quebraria a compatibilidade parcial de dados do UTF-8 com o UTF-16.
fonte
Realmente, apenas 2 códigos de pontos de código Unicode representam infinitamente muitos glifos, se eles estavam combinando caracteres.
Compare, por exemplo, as duas maneiras que o Unicode codifica para o alfabeto coreano Hangul: Hangul Syllables e Hangul Jamo . O caractere 웃 in
Hangul Syllabels
é o ponto de código único,C6C3
enquantoHangul Jamo
nele estão os três pontos de código110B
(ㅇ)116E
(ㅜ)11B9
(ㅅ). Obviamente, o uso de 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 esse truque, não há necessidade de ir além do número de pontos de código que atualmente podem ser codificados em UTF-8 ou UTF-16.
Eu acho que tudo se resume a como os alienígenas ficariam ofendidos se o idioma deles exigisse muito mais bytes por mensagem do que os idiomas terrestres. Se eles não se importam, digamos, em representar cada um dos milhões de caracteres usando uma mistura de digamos, 100k caracteres combinados, não há problema; por outro lado, se ser forçado a usar mais bytes do que os terráqueos faz com que se sintam cidadãos de segunda classe, poderíamos ter algum conflito ( não muito diferente do que já observamos com o UTF-8 ).
fonte
Edit: A pergunta agora diz "milhões de novos personagens". Isso facilita a resposta:
Não . Utf-8 é uma codificação Unicode. O Unicode possui um espaço de código que permite 1.114.112 pontos de código distintos e menos de um milhão atualmente não está atribuído. Portanto, não é possível oferecer suporte a milhões de novos caracteres em Unicode. Por definição, nenhuma codificação Unicode pode suportar mais caracteres do que o definido por Unicode. (É claro que você pode trapacear codificando um nível ainda mais - qualquer tipo de dado pode ser representado por apenas dois caracteres.)
Para responder à pergunta original:
O Unicode não suporta idiomas, como tal, suporta caracteres - símbolos usados para representar o idioma na forma escrita.
Nem todas as línguas humanas têm uma representação escrita; portanto, nem todas as línguas humanas podem ser suportadas pelo Unicode. Além disso, muitos animais se comunicam, mas não possuem linguagem escrita. As baleias, por exemplo, têm uma forma de comunicação complexa o suficiente para chamar um idioma, mas não possui 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.
Pior ainda é algo como a linguagem das abelhas. Não apenas não possui uma forma escrita, como também não pode ser representado de forma significativa. 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 local e horário específicos 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, portanto, não é inconcebível que uma raça de alienígenas que viajam no espaço tenha evoluído para usar uma linguagem pictórica.
Mesmo se uma raça alienígena tivesse um idioma com um sistema de escrita com um conjunto finito de símbolos, talvez esse sistema não seja possível de ser suportado no Unicode. O Unicode espera que a escrita seja uma sequência linear de símbolos. A notação musical é um exemplo de um sistema de escrita que não pode ser totalmente representado em Unicode, porque o significado é codificado na escolha dos símbolos e na colocação vertical e horizontal. (O Unicode suporta símbolos musicais individuais, mas não pode codificar uma partitura.) Uma raça alienígena que se comunica usando música polifônica (não incomum) ou um canal de comunicação de complexidade semelhante, pode muito bem ter um sistema de escrita parecido com uma partitura orquestral, e Unicode não pode suportar isso.
Mas, por uma questão de argumento, suponha que todas as línguas, mesmo línguas estrangeiras, possam ser expressas como uma sequência linear de símbolos selecionados de um conjunto finito. O Unicode é grande o suficiente para uma invasão alienígena? Atualmente, o Unicode possui menos de um milhão de pontos de código não atribuídos. O idioma chinês contém centenas de milhares de caracteres de acordo com o dicionário chinês mais abrangente (nem todos eles 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, e não ideográfica, e, portanto, contém um pequeno número de caracteres. Se todas as línguas 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 utiliza 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 ideográficos de escrita pode exceder o que o Unicode pode suportar. Agora considere se esse alienígena 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, pois a limitação está no número de pontos de código suportados pelo Unicode.
Portanto, a resposta provavelmente não é.
fonte