¿UTF-8 podría apoyar la inclusión de un vasto idioma extranjero con millones de nuevos personajes?

85

En el caso de que ocurriera una invasión alienígena y nos viéramos obligados a admitir sus idiomas en todos nuestros sistemas informáticos existentes, ¿Está diseñado el UTF-8 de manera que permita su gran cantidad de caracteres?

(Por supuesto, no sabemos si los extraterrestres realmente tienen idiomas, si o cómo se comunican, pero por el bien del argumento, solo imagine que los tienen).

Por ejemplo, si su lenguaje consistiera en millones de glifos, símbolos y / o caracteres combinados , podría UTF -8 teóricamente, ¿se puede expandir de manera no destructiva para incluir estos nuevos glifos y seguir siendo compatible con todo el software existente?

Me interesa más si los glifos superaron con creces las limitaciones de tamaño actuales y requirieron más bytes para representar un solo glifo. En el caso de que UTF-8 pudiera no expandirse, ¿eso prueba que la única ventaja sobre UTF-32 es simplemente el tamaño de los caracteres inferiores?

    
pregunta Qix 24.11.2015 - 13:18

5 respuestas

109

El estándar Unicode tiene mucho espacio de sobra. Los puntos de código de Unicode están organizados en "planos" y "bloques". Del total de 17 aviones, hay 11 actualmente sin asignar . Cada avión tiene 65,536 caracteres, por lo que hay medio millón de puntos de código que se pueden ahorrar para una lengua extraña (a menos que llenemos todo eso con más emoji antes del primer contacto). A partir de Unicode 8.0, solo se han asignado 120,737 puntos de código en total (aproximadamente el 10% de la capacidad total), con aproximadamente la misma cantidad sin asignar pero reservada para uso privado y específico de la aplicación. En total, 974.530 puntos de código no están asignados.

UTF-8 es una codificación específica de Unicode, y actualmente está limitada a cuatro octetos (bytes) por punto de código, que coincide con las limitaciones de UTF-16. En particular, UTF-16 solo soporta 17 planos. Anteriormente, UTF-8 admitía 6 octetos por punto de código y estaba diseñado para admitir 32768 planos. En principio, este límite de 4 bytes podría eliminarse, pero eso rompería la estructura organizativa actual de Unicode y requeriría la eliminación gradual de UTF-16, lo que probablemente no suceda en un futuro próximo, considerando lo arraigado que está en ciertos sistemas operativos y programación. idiomas.

La única razón por la que UTF-16 sigue siendo de uso común es que es una extensión de la codificación UCS-2 defectuosa que solo admite un único plano Unicode. De lo contrario, hereda propiedades indeseables tanto de UTF-8 (no de ancho fijo) como de UTF-32 (no compatible con ASCII, pérdida de espacio para datos comunes), y requiere marcas de orden de bytes para declarar la endianidad. Dado que a pesar de estos problemas, UTF-16 sigue siendo popular, no soy demasiado optimista de que esto va a cambiar por sí mismo muy pronto. Con suerte, nuestros nuevos Alien Overlords verán este impedimento para Su gobierno, y en Su sabiduría eliminarán el UTF-16 de la faz de la tierra .

    
respondido por el amon 24.11.2015 - 13:48
30

Si realmente se va a extender UTF-8, deberíamos fijarnos en el máximo absoluto que podría representar. UTF-8 está estructurado de esta manera:

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

(copiado descaradamente del RFC .) Vemos que el primer byte siempre controla la cantidad de seguidores. -up bytes componen el carácter actual.

Si lo extendemos para permitir hasta 8 bytes, obtenemos las representaciones adicionales que no son de Unicode

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

Al calcular las representaciones máximas posibles que esta técnica nos permite llegar a

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

o en 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 da la cantidad máxima de representaciones como 4,468,982,745,216.

Por lo tanto, si estos 4 mil millones ( o trillón, como quiera ) son suficientes para representar los idiomas extranjeros que Estoy bastante seguro de que podemos, con un mínimo esfuerzo, extender el actual UTF-8 para complacer a nuestros nuevos amos extraterrestres ;-)

    
respondido por el Boldewyn 24.11.2015 - 17:21
7

RFC3629 restringe UTF-8 a un máximo de cuatro bytes por carácter, con un valor máximo de 0x10FFFF, permitiendo un Máximo de 1,112,064 puntos de código. Obviamente, esta restricción podría eliminarse y extenderse el estándar, pero esto resultaría un cambio importante para el código existente que funciona hasta ese límite.

Desde el punto de vista del archivo de datos, esto no sería un cambio importante, ya que el estándar funciona sobre la base de que si se establece el bit más significativo (MSB) de cada byte, el siguiente byte es parte de la codificacion Incluso antes de RFC3629, el estándar estaba limitado a 31 bits, dejando sin establecer el MSB del cuarto byte.

Sin embargo, extender el estándar más allá de 0x10FFFF rompería la compatibilidad de datos parcial de UTF-8 con UTF-16.

    
respondido por el David Arno 24.11.2015 - 13:25
4

En realidad, solo el código de 2 puntos de código Unicode representa infinitos glifos, si se combinan los caracteres.

Compare, por ejemplo, las dos formas en que Unicode codifica para el alfabeto Hangul coreano: Sílabas Hangul y Hangul Jamo . El carácter 웃 en Hangul Syllabels es el único punto de código C6C3 mientras que en Hangul Jamo son los tres puntos de código 110B (ㅇ) 116E (ㅜ) 11B9 (ㅅ). Obviamente, el uso de caracteres combinados consume muchos menos puntos de código, pero es menos eficiente para escribir porque se necesitan más bytes para escribir cada carácter.

Con este truco, no es necesario ir más allá del número de puntos de código que actualmente se pueden codificar en UTF-8 o UTF-16.

Supongo que todo se reduce a lo ofendidos que estarían los alienígenas si su idioma requiriera muchos más bytes por mensaje que los idiomas terrenales. Si no les importa, digamos, representar a cada uno de sus millones de personajes usando una mezcla de, digamos, 100k combinando caracteres, entonces no hay problema; por otro lado, si nos vemos forzados a usar más bytes que los terrícolas los hace sentir como ciudadanos de segunda clase, podríamos enfrentarnos a algún conflicto ( no es diferente de lo que ya observamos con UTF-8 ).

    
respondido por el Owen 24.11.2015 - 21:18
-2

Editar: La pregunta ahora dice "millones de nuevos personajes". Esto facilita la respuesta:

No . Utf-8 es una codificación Unicode. Unicode tiene un espacio de código que permite 1,114,112 puntos de código distintos , y menos de un millón está actualmente sin asignar. Por lo tanto, no es posible admitir millones de nuevos caracteres en Unicode. Por definición, ninguna codificación Unicode puede admitir más caracteres de los que define Unicode. (Por supuesto, puedes hacer trampa codificando un nivel aún más: después de todo, cualquier tipo de información puede representarse con solo dos caracteres).

Para responder a la pregunta original:

Unicode no admite idiomas como tales, admite caracteres, símbolos utilizados para representar idiomas en forma escrita.

No todos los idiomas humanos tienen una representación escrita, por lo que no todos los idiomas humanos pueden ser admitidos por Unicode. Además muchos animales se comunican pero no tienen un lenguaje escrito. Las ballenas, por ejemplo, tienen una forma de comunicación que es lo suficientemente compleja como para llamar a un idioma, pero no tiene ninguna forma escrita (y tampoco puede ser capturada por la notación fonética existente). Así que ni siquiera todos los idiomas del mundo pueden ser soportados por Unicode.

Peor aún es algo como el lenguaje de las abejas. No solo no tiene una forma escrita, sino que no puede representarse de manera significativa en forma escrita. El lenguaje es un tipo de danza que básicamente apunta en una dirección pero depende de la posición actual del sol. Por lo tanto, la danza solo tiene valor informativo en el lugar y la hora en que se realiza. Una representación simbólica o textual tendría que incluir información (ubicación, posición del sol) que el lenguaje de las abejas actualmente no puede expresar.

Incluso una forma de comunicación escrita o simbólica podría no ser posible representar en Unicode. Por ejemplo, Unicode no puede admitir ilustraciones o cómics sin palabras ya que el conjunto de glifos no es finito. Notará mucha comunicación pictórica en entornos internacionales como un aeropuerto, por lo que no es inconcebible que una raza de extraterrestres haya evolucionado para usar un lenguaje pictórico.

Incluso si una raza alienígena tuviera un lenguaje con un sistema de escritura con un conjunto finito de símbolos, este sistema podría no ser compatible con Unicode. Unicode espera que la escritura sea una secuencia lineal de símbolos. La notación musical es un ejemplo de un sistema de escritura que no se puede representar completamente en Unicode, porque el significado está codificado tanto en la selección de símbolos como en la ubicación vertical y horizontal. (Unicode admite símbolos musicales individuales, pero no puede codificar una partitura). Una raza alienígena que se comunicó utilizando música polifónica (no infrecuente) o un canal de comunicación de complejidad similar, podría muy bien tener un sistema de escritura que se parezca a una partitura orquestal, y Unicode no puede soportar esto.

Pero, por el bien del argumento, supongamos que todos los idiomas, incluso los idiomas extraños, se pueden expresar como una secuencia lineal de símbolos seleccionados de un conjunto finito. ¿Es Unicode lo suficientemente grande para una invasión alienígena? Unicode tiene actualmente menos de un millón de puntos de código sin asignar. El idioma chino contiene cientos de miles de caracteres de acuerdo con el diccionario chino más completo (no todos ellos son compatibles actualmente con Unicode como caracteres distintos). Así que solo diez idiomas con la complejidad del chino usarían todo Unicode. En la tierra tenemos cientos de sistemas de escritura distintos, pero afortunadamente la mayoría son alfabéticos en vez de ideográficos y, por lo tanto, contienen un pequeño número de caracteres. Si todos los idiomas escritos usaran ideogramas como el chino, Unicode ni siquiera sería lo suficientemente grande para la Tierra. El uso de alfabetos se deriva del habla que solo usa un número limitado de fonemas, pero eso es particular para la fisiología humana. Así que incluso un solo planeta alienígena con solo una docena de sistemas de escritura ideográfica podría superar lo que Unicode puede soportar. Ahora considere si este alienígena ya ha invadido otros planetas antes de la Tierra e incluyó sus sistemas de escritura en el conjunto de caracteres que deben ser compatibles.

La expansión o modificación de las codificaciones actuales, o la introducción de nuevas codificaciones no resolverán esto, ya que la limitación está en el número de puntos de código admitidos por Unicode.

Entonces la respuesta es probablemente no.

    
respondido por el JacquesB 24.11.2015 - 20:26

Lea otras preguntas en las etiquetas