Au cas où une invasion extraterrestre se produirait et que nous serions obligés de prendre en charge leurs langues dans tous nos systèmes informatiques existants, UTF-8 est-il conçu de manière à prendre en charge leur très grande quantité de caractères?
(Bien sûr, nous ne savons pas si les extraterrestres ont réellement des langues, si ou comment ils communiquent, mais pour l'intérêt de la discussion, imaginez-les, s'il vous plaît.)
Par exemple, si leur langue est constituée de millions de glyphes, de symboles et / ou de combinaisons de caractères récemment trouvés, UTF-8 pourrait-il être théoriquement étendu de manière irréversible pour inclure ces nouveaux glyphes tout en prenant en charge tous les logiciels existants?
Je suis plus intéressé par si les glyphes dépassaient de loin les limitations de taille actuelles et nécessitaient plus d'octets pour représenter un seul glyphe. Dans le cas où UTF-8 ne pourrait pas être étendu, est-ce que cela prouve que le seul avantage par rapport à UTF-32 est simplement la taille des caractères plus bas?
Réponses:
Le standard Unicode a beaucoup d’espace libre. Les points de code Unicode sont organisés en "plans" et en "blocs". Sur 17 avions au total, 11 sont actuellement non assignés . Chaque avion contient 65 536 caractères, il est donc réaliste de disposer d'un demi-million de points de code pour une langue étrangère (à moins que nous ne remplissions tout cela avec plus d'émoticônes avant le premier contact). À partir de la version Unicode 8.0, seuls 120 737 points de code ont été attribués au total (environ 10% de la capacité totale), le même montant étant non attribué mais réservé à un usage privé, spécifique à l'application. Au total, 974 530 points de code sont non attribués.
UTF-8 est un codage spécifique d'Unicode et est actuellement limité à quatre octets (octets) par point de code, ce qui correspond aux limites de UTF-16. En particulier, UTF-16 ne prend en charge que 17 avions. Auparavant, UTF-8 prenait en charge 6 octets par point de code et était conçu pour prendre en charge 32768 avions. En principe, cette limite de 4 octets pourrait être supprimée, mais cela casserait la structure organisationnelle actuelle d'Unicode et nécessiterait la suppression progressive du format UTF-16. langues.
La seule raison pour laquelle UTF-16 est encore utilisé, c'est qu'il s'agit d'une extension du codage défectueux UCS-2 qui ne supportait qu'un seul plan Unicode. Il hérite par ailleurs des propriétés indésirables de UTF-8 (non à largeur fixe) et de UTF-32 (non compatible ASCII, perte d’espace pour les données communes) et requiert des marques d’octets pour déclarer l’endianité. Étant donné que, malgré ces problèmes, UTF-16 est toujours populaire, je ne suis pas très optimiste sur le fait que cela va changer très prochainement. Espérons que nos nouveaux seigneurs extraterrestres verront cet obstacle à leur gouvernement et, dans leur sagesse, bannir UTF-16 de la surface de la terre .
la source
wfopen
appel système ni rien d’autre, c’est du UTF8 au complet. Hell même Python et Java - les deux qui définissent des chaînes comme UTF-16 pour des raisons historiques - ne stockent pas les chaînes comme UTF-16 sauf lorsque cela est nécessaire. la mémoire est chère, le processeur est bon marché). Il en va de même pour Android: le JString du NDK est UTF8, principalement parce que les ingénieurs de Google ne sont pas fous.Si le format UTF-8 doit en fait être étendu, nous devrions examiner le maximum absolu qu'il pourrait représenter. UTF-8 est structuré comme suit:
(copié sans vergogne à partir de la RFC .) Nous voyons que le premier octet contrôle toujours le nombre d'octets de suivi composant le caractère actuel.
Si nous l'étendons pour autoriser jusqu'à 8 octets, nous obtenons les représentations supplémentaires non Unicode.
Calculer le maximum de représentations possibles que cette technique nous permet d'arriver
ou en base 10:
ce qui nous donne le nombre maximal de représentations sous la forme de 4 468 982 745 216.
Donc, si ces 4 milliards ( ou mille milliards de caractères, comme vous s'il vous plait ) sont suffisants pour représenter les langues étrangères, je suis assez convaincu que nous pouvons, avec un minimum d'effort, étendre l'actuel UTF-8 pour faire plaisir à nos nouveaux seigneurs étrangers ;-)
la source
111111xx
comme premier octet possible suivi de cinq octets d'extension pour un maximum de 2³² points de code. Mais cela n’est compatible qu’avec la définition que vous mentionnez pour les premiers 2³¹ points de code.F4 8F BF BF
en octets UTF-8). Donc, tout ce que je mentionne ici au-delà de cela n’est que pure spéculation. Bien sûr, quelqu'un pourrait penser à d'autres extensions, où un premier octet élevé signifie une structure différente (et, espérons-le, ne détruit pas l'auto-synchronisation dans le processus). J'ai essayé de compléter le schéma d'octets pour être aussi proche que possible du vrai UTF-8, cependant.FF
introduit une unité de code à 13 octets capable de stocker 72 bits. Tout ce qui dépasse 2 ^ 36 est uniformément très coûteux, mais cela permet de coder un int de 64 bits et plus encore.La norme RFC3629 limite UTF-8 à un maximum de quatre octets par caractère, avec une valeur maximale de 0x10FFFF, permettant un maximum de 1 112 064 points de code. De toute évidence, cette restriction pourrait être supprimée et la norme étendue, mais cela constituerait un changement radical pour le code existant qui fonctionne à cette limite.
Du point de vue des fichiers de données, cela ne constituerait pas un changement radical, car la norme repose sur le principe que si le bit le plus significatif (MSB) de chaque octet est défini, le prochain octet fait partie de l'encodage. Même avant la RFC3629, la norme était limitée à 31 bits, laissant le bit de poids fort du quatrième octet non défini.
L'extension de la norme au-delà de 0x10FFFF romprait cependant la compatibilité partielle des données entre UTF-8 et UTF-16.
la source
En réalité, seuls 2 codes de points Unicode représentent un nombre infini de glyphes s’ils combinaient des caractères.
Comparez, par exemple, les deux manières que Unicode code pour l'alphabet coréen Hangul: Hangul Syllables et Hangul Jamo . Le caractère 웃 in
Hangul Syllabels
est le code uniqueC6C3
alorsHangul Jamo
qu'il contient les trois points de code110B
()116E
(ㅜ)11B9
(). Évidemment, la combinaison de caractères nécessite beaucoup moins de points de code, mais est moins efficace en écriture car il faut plus d'octets pour écrire chaque caractère.Avec cette astuce, il n’est pas nécessaire d’aller au-delà du nombre de points de code pouvant être actuellement codés en UTF-8 ou UTF-16.
Je suppose que cela dépend de la façon dont les extraterrestres seraient offensés si leur langue nécessitait beaucoup plus d'octets par message que les langues terrestres. Si cela ne les dérange pas, par exemple, de représenter chacun de leurs millions de caractères à l'aide d'un fouillis de 100 000 caractères combinés, il n'y a pas de problème; D'un autre côté, si être obligés d'utiliser plus d'octets que de terriens leur donne l'impression d'être des citoyens de seconde zone, nous pourrions être en conflit (ce qui n'est pas sans rappeler ce que nous observons déjà avec UTF-8 ).
la source
Edit: La question dit maintenant "des millions de nouveaux personnages". Cela facilite la réponse:
Non . Utf-8 est un codage Unicode. Unicode dispose d'un espace de codes qui permet 1 114 112 points de code distincts , et moins d'un million sont actuellement non attribués. Il n'est donc pas possible de prendre en charge des millions de nouveaux caractères dans Unicode. Par définition, aucun codage Unicode ne peut prendre en charge plus de caractères que ceux définis par Unicode. (Bien sûr, vous pouvez tricher en encodant un niveau plus loin - n'importe quel type de données ne peut être représenté que par deux caractères après tout.)
Pour répondre à la question initiale:
Unicode ne prend pas en charge les langues en tant que telles, il prend en charge les caractères - symboles utilisés pour représenter la langue sous forme écrite.
Toutes les langues humaines n’ont pas de représentation écrite. Par conséquent, Unicode ne prend pas en charge toutes les langues humaines. En outre, de nombreux animaux communiquent mais n’ont pas de langue écrite. Les baleines, par exemple, ont une forme de communication assez complexe pour appeler une langue, mais n’ont aucune forme écrite (et ne peuvent pas non plus être capturées par la notation phonétique existante). Donc, même toutes les langues sur terre ne peuvent pas être supportées par Unicode.
Pire encore est quelque chose comme le langage des abeilles. Non seulement il n’a pas de forme écrite, mais il ne peut pas être représenté de manière significative sous forme écrite. La langue est une sorte de danse qui pointe dans une direction mais qui repose sur la position actuelle du soleil. Par conséquent, la danse n’a de valeur d’information qu’à l’endroit et à l’endroit particuliers où elle est exécutée. Une représentation symbolique ou textuelle devrait inclure des informations (emplacement, position du soleil) que le langage des abeilles ne peut actuellement pas exprimer.
Même une forme de communication écrite ou symbolique peut ne pas être possible de représenter en Unicode. Par exemple, les illustrations et les bandes dessinées sans mots ne peuvent pas être prises en charge par Unicode car l'ensemble des glyphes n'est pas fini. Vous remarquerez beaucoup de communication imagée dans les contextes internationaux, comme un aéroport, et il n’est donc pas inconcevable qu’une race d’étrangers voyageant dans l’espace ait évolué pour utiliser un langage imagé.
Même si une race étrangère avait un langage avec un système d'écriture avec un ensemble fini de symboles, ce système pourrait ne pas être pris en charge en Unicode. Unicode s'attend à ce que l'écriture soit une séquence linéaire de symboles. La notation musicale est un exemple de système d'écriture qui ne peut pas être entièrement représenté en Unicode, car la signification est codée à la fois par le choix des symboles et par le placement vertical et horizontal. (Unicode prend en charge les symboles musicaux individuels, mais ne peut pas coder une partition.) Une race extraterrestre qui communiquait à l'aide d'une musique polyphonique (pas rare) ou d'un canal de communication d'une complexité similaire pourrait très bien avoir un système d'écriture ressemblant à une partition d'orchestre. Unicode ne peut pas supporter cela.
Mais supposons, pour des raisons d’argumentation, que toutes les langues, même les langues étrangères, puissent être exprimées sous la forme d’une séquence linéaire de symboles sélectionnés dans un ensemble fini. Unicode est-il assez gros pour une invasion extraterrestre? Unicode a actuellement moins d'un million de points de code non attribués. La langue chinoise contient une centaine de milliers de caractères selon le dictionnaire chinois le plus complet (tous ne sont pas actuellement pris en charge par Unicode en tant que caractères distincts). Ainsi, seules dix langues présentant la complexité du chinois utiliseraient la totalité de l’Unicode. Sur Terre, nous avons des centaines de systèmes d'écriture distincts, mais heureusement, la plupart d'entre eux sont alphabétiques plutôt qu'idéographiques et contiennent donc un petit nombre de caractères. Si toutes les langues écrites utilisaient des idéogrammes tels que le chinois, Unicode ne serait même pas assez grand pour la Terre. L'utilisation des alphabets est dérivée de la parole qui n'utilise qu'un nombre limité de phonèmes, mais cela est particulier pour la physiologie humaine. Ainsi, même une seule planète extraterrestre ne disposant que d’une douzaine de systèmes d’écriture idéographique pourrait dépasser ce que Unicode peut prendre en charge. Maintenant, considérons si cet étranger a déjà envahi d'autres planètes avant la Terre et inclus leurs systèmes d'écriture dans le jeu de caractères à supporter.
L’extension ou la modification des codages actuels, ou l’introduction de nouveaux codages ne résoudra pas ce problème, car le nombre de points de code pris en charge par Unicode est limité.
Donc, la réponse est probablement non.
la source