L'UTF-8 sarebbe in grado di supportare l'inclusione di un vasto linguaggio alieno con milioni di nuovi personaggi?

86

Nel caso si sia verificata una invasione aliena e siamo stati costretti a supportare le loro lingue in tutti i nostri sistemi informatici esistenti, UTF-8 è progettato in modo da consentire la loro possibilmente vasta quantità di caratteri?

(Naturalmente, non sappiamo se gli alieni abbiano effettivamente delle lingue, se o come comunichino, ma per il gusto dell'argomento, per favore, immagina che lo facciano.)

Ad esempio, se il loro linguaggio era composto da milioni di glifi, simboli e / o combinazione di caratteri , potrebbe UTF -8 è teoricamente ampliato in modo irrinunciabile per includere questi nuovi glifi e supportare ancora tutti i software esistenti?

Sono più interessato a se i glifi superano di gran lunga le attuali dimensioni limite e richiedevano più byte per rappresentare un singolo glifo. Nel caso in cui UTF-8 potrebbe non essere espanso, ciò dimostra che il singolo vantaggio rispetto a UTF-32 è semplicemente la dimensione dei caratteri inferiori?

    
posta Qix 24.11.2015 - 13:18
fonte

5 risposte

109

Lo standard Unicode ha molto spazio a disposizione. I codepoint Unicode sono organizzati in "piani" e "blocchi". Dei 17 aerei totali, ci sono 11 attualmente non assegnati . Ogni piano contiene 65.536 caratteri, quindi c'è realisticamente mezzo milione di codepoints da salvare per una lingua aliena (a meno che non riusciamo a riempire tutto ciò con più emoji prima del primo contatto). A partire da Unicode 8.0, sono stati assegnati solo 120.737 punti di codice (circa il 10% della capacità totale), con circa lo stesso importo non assegnato ma riservato per uso privato specifico dell'applicazione. In totale, 974.530 codepoint non sono assegnati.

UTF-8 è una codifica specifica di Unicode, ed è attualmente limitata a quattro ottetti (byte) per punto di codice, che corrisponde alle limitazioni di UTF-16. In particolare, UTF-16 supporta solo 17 piani. Precedentemente, UTF-8 supportava 6 ottetti per punto di codice ed era progettato per supportare 32768 piani. In linea di principio questo limite di 4 byte potrebbe essere revocato, ma ciò interromperà l'attuale struttura organizzativa di Unicode e richiederebbe l'eliminazione graduale di UTF-16 - improbabile che accada nel prossimo futuro considerando quanto è radicato in determinati sistemi operativi e programmazione lingue.

L'unica ragione per cui UTF-16 è ancora in uso comune è che è un'estensione della codifica UCS-2 imperfetta che supportava solo un singolo piano Unicode. In caso contrario eredita proprietà indesiderate da UTF-8 (non a larghezza fissa) e UTF-32 (non compatibile ASCII, spreco di spazio per dati comuni) e richiede segni di ordinamento dei byte per dichiarare endianness. Dato che nonostante questi problemi UTF-16 è ancora popolare, non sono troppo ottimista sul fatto che questo cambierà da solo molto presto. Spero che i nostri nuovi Overland di Alien vedranno questo impedimento alla loro regola e nella loro saggezza bandire UTF-16 dalla faccia della terra .

    
risposta data 24.11.2015 - 13:48
fonte
30

Se UTF-8 deve essere effettivamente esteso, dovremmo considerare il massimo assoluto che potrebbe rappresentare. UTF-8 è strutturato in questo modo:

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

(copiata senza vergogna dalla RFC .) Vediamo che il primo byte controlla sempre quanti seguono -up byte costituiscono il carattere corrente.

Se lo estendiamo per consentire fino a 8 byte otteniamo le rappresentazioni aggiuntive non 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

Calcolare le rappresentazioni massime possibili che questa tecnica consente di raggiungere

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

o in base 10:

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

che ci fornisce la quantità massima di rappresentazioni di 4.468.982.745.216.

Quindi, se questi 4 miliardi ( o trilioni, come ti piace ) sono sufficienti per rappresentare le lingue straniere che ho sono abbastanza ottimista che possiamo, con il minimo sforzo, estendere l'attuale UTF-8 per compiacere i nostri nuovi signori alieni; -)

    
risposta data 24.11.2015 - 17:21
fonte
7

RFC3629 limita UTF-8 a un massimo di quattro byte per carattere, con un valore massimo di 0x10FFFF, che consente massimo di 1,112,064 punti codice. Ovviamente questa restrizione potrebbe essere rimossa e lo standard esteso, ma ciò provocherebbe un cambio di rottura per il codice esistente che funziona a quel limite.

Dal punto di vista di un file di dati, questo non sarebbe un cambio di rottura in quanto lo standard funziona sulla base del fatto che se il bit più significativo (MSB) di ogni byte è impostato, allora il byte successivo fa parte del codifica. Anche prima di RFC3629, lo standard era limitato a 31 bit, lasciando l'MSB del quarto byte non impostato.

Estendere lo standard al di là di 0x10FFFF romperebbe comunque la compatibilità parziale dei dati UTF-8 con UTF-16.

    
risposta data 24.11.2015 - 13:25
fonte
4

In realtà, solo 2 codici code code Unicode possono contenere infinitamente molti glifi, se combinassero caratteri.

Confronta, ad esempio, i due modi in cui Unicode codifica per l'alfabeto Hangul coreano: Hangul Syllables e Hangul Jamo . Il carattere 웃 in Hangul Syllabels è il singolo punto di codice C6C3 mentre in Hangul Jamo sono i tre punti di codice 110B (ㅇ) 116E (ㅜ) 11B9 (ㅅ). Ovviamente, l'uso della combinazione di caratteri richiede molti meno punti di codice, ma è meno efficiente per la scrittura perché sono necessari più byte per scrivere ciascun carattere.

Con questo trucco, non è necessario andare oltre il numero di punti di codice che possono essere codificati in UTF-8 o UTF-16.

Immagino che si tratti di quanto sarebbero offesi gli alieni se il loro linguaggio avesse richiesto molti più byte per messaggio rispetto alle lingue terrene. Se non si preoccupano, ad esempio, di rappresentare ciascuno dei loro milioni di personaggi usando un miscuglio di dire, 100k combinando caratteri, allora non ci sono problemi; d'altra parte, se essere costretti a usare più byte che terrestri li fa sentire come cittadini di seconda classe, potremmo trovarci in qualche conflitto ( non diversamente da quello che già osserviamo con UTF-8 ).

    
risposta data 24.11.2015 - 21:18
fonte
-2

Modifica: la domanda ora dice "milioni di nuovi personaggi". Questo semplifica la risposta:

No . Utf-8 è una codifica Unicode. Unicode ha uno spazio di codice che consente 1.114.112 distinti codepoint e meno di un milione non è attualmente assegnato. Quindi non è possibile supportare milioni di nuovi caratteri in Unicode. Per definizione, nessuna codifica Unicode può supportare più caratteri di quelli definiti da Unicode. (Ovviamente puoi imbrogliare codificando un livello ulteriormente - qualsiasi tipo di dati può essere rappresentato da solo due caratteri dopotutto).

Per rispondere alla domanda originale:

Unicode non supporta le lingue in quanto tali, supporta i caratteri: i simboli utilizzati per rappresentare la lingua in forma scritta.

Non tutti i linguaggi umani hanno una rappresentazione scritta, quindi non tutte le lingue umane possono essere supportate da Unicode. Inoltre molti animali comunicano ma non hanno una lingua scritta. Le balene ad esempio hanno una forma di comunicazione abbastanza complessa da chiamare una lingua, ma non ha alcuna forma scritta (e non può essere catturata nemmeno dalla notazione fonetica esistente). Quindi nemmeno tutte le lingue sulla terra possono essere supportate da Unicode.

Ancora peggio è qualcosa come il linguaggio delle api. Non solo non ha una forma scritta, non può essere rappresentato in modo significativo in forma scritta. Il linguaggio è un tipo di danza che punta in una direzione ma si basa sulla posizione attuale del sole. Pertanto la danza ha solo valore informativo nel luogo e nel momento in cui viene eseguita. Una rappresentazione simbolica o testuale dovrebbe includere informazioni (posizione, posizione del sole) che la lingua delle api attualmente non può esprimere.

Anche una forma di comunicazione scritta o simbolica potrebbe non essere possibile rappresentare in Unicode. Ad esempio illustrazioni o fumetti senza parole non possono essere supportati da Unicode poiché l'insieme di glifi non è finito. Noterai molta comunicazione pittorica in ambienti internazionali come un aeroporto, quindi non è inconcepibile che una razza di alieni che viaggiano nello spazio si siano evoluti per usare un linguaggio pittorico.

Anche se una razza aliena aveva una lingua con un sistema di scrittura con un insieme finito di simboli, questo sistema potrebbe non essere possibile supportare in Unicode. Unicode prevede che la scrittura sia una sequenza lineare di simboli. La notazione musicale è un esempio di un sistema di scrittura che non può essere completamente rappresentato in Unicode, poiché il significato è codificato sia nella scelta dei simboli che nel posizionamento verticale e orizzontale. (Unicode supporta simboli musicali individuali, ma non può codificare una partitura.) Una razza aliena che comunicava usando la musica polifonica (non rara) o un canale di comunicazione di complessità simile, potrebbe benissimo avere un sistema di scrittura simile a una partitura orchestrale, e Unicode non supporta questo.

Ma lasciamo supporre che tutte le lingue, anche quelle aliene, possano essere espresse come una sequenza lineare di simboli selezionati da un insieme finito. Unicode è abbastanza grande per un'invasione aliena? Unicode ha attualmente meno di un milione di codepoint non assegnati. La lingua cinese contiene centinaia di migliaia di caratteri in base al dizionario cinese più completo (non tutti sono attualmente supportati da Unicode come caratteri distinti). Quindi solo dieci lingue con la complessità del cinese userebbero tutto l'Unicode. Sulla terra abbiamo centinaia di sistemi di scrittura distinti, ma per fortuna molti sono alfabetici piuttosto che ideografici e quindi contengono un piccolo numero di caratteri. Se tutte le lingue scritte usassero ideogrammi come il cinese, Unicode non sarebbe nemmeno abbastanza grande per la terra. L'uso dell'alfabeto deriva dal linguaggio che utilizza solo un numero limitato di fonemi, ma è specifico per la fisiologia umana. Quindi anche un singolo pianeta alieno con solo una dozzina di sistemi di scrittura ideografici potrebbe superare ciò che Unicode può supportare. Considerate ora se questo alieno ha già invaso altri pianeti prima della terra e ha incluso i loro sistemi di scrittura nell'insieme di personaggi che devono essere supportati.

L'espansione o la modifica delle codifiche attuali o l'introduzione di nuove codifiche non risolveranno questo problema, poiché la limitazione è nel numero di punti di codice supportati da Unicode.

Quindi la risposta è molto probabilmente no.

    
risposta data 24.11.2015 - 20:26
fonte

Leggi altre domande sui tag