Senza ulteriori contesto, direi che il numero massimo di byte per un personaggio in UTF-8 è
risposta: 6 byte
L'autore della risposta accettata rilevare correttamente questo come il " specifica originale ", ma ritengo che questo sia fuorviante per il lettore, perché per quanto ne so, questa è ancora la specifica attuale e corretta, per wikipedia e per a Google book on UTF-8 in Java.
RFC riferimento negli stati risposta accettato che solo quattro byte sono rilevanti per una codifica UTF-16, di modo che è corretto solo se si aggiunge contesto
risposta se traducendo solo caratteri UTF-16 a UTF- 8: 4 byte
Ora, tutti i caratteri che possono essere rappresentati da UTF-16 sono utili? Secondo wikipedia again, unicode può rappresentare fino a x10FFFF punti di codice. Quindi, incluso 0, ciò significa che possiamo farlo con questi byte: F FF FF, cioè due byte e mezzo o 20 bit. Guardando indietro alle specifiche UTF-8, vediamo che possiamo rappresentare 20 bit con un massimo di quattro byte codificati in UTF-8. Così
risposta se copre tutta unicode: 4 byte
Ma, in Java <= v7, si parla di un massimo di 3 byte per rappresentare unicode con UTF-8? Questo perché la specifica unicode originale definiva solo il piano multilingue multi-lingua (BMP), cioè una versione precedente di unicode o sottoinsieme di unicode moderno. Così
risposta se rappresentano solo unicode originale, il BMP: 3 byte
Ma, i colloqui OP di andare nella direzione opposta. Non da caratteri a byte UTF-8, ma da byte UTF-8 a una rappresentazione "String" di byte. Forse l'autore della risposta accettata ha ottenuto questo dal contesto della domanda, ma questo non è necessariamente ovvio, quindi potrebbe confondere il lettore casuale di questa domanda.
Passando da UTF-8 alla codifica nativa, dobbiamo osservare come viene implementata la "stringa". Alcuni linguaggi, come Python> = 3, rappresentano ciascun carattere con punti di codice intero, che consente 4 byte per carattere = 32 bit per coprire il 20 di cui abbiamo bisogno per unicode, con qualche spreco. Perché non esattamente 20 bit? Perché le cose sono più veloci quando sono allineate a byte. Alcuni linguaggi come Python < = 2 e Java rappresentano caratteri che utilizzano una codifica UTF-16, il che significa che devono utilizzare coppie surrogate per rappresentare unicode esteso (non BMP). In entrambi i casi è ancora massimo 4 byte.
risposta se andare UTF-8 -> codifica nativa: 4 byte
Quindi, conclusione finale, 4 è la risposta più comune a destra, quindi abbiamo ottenuto nel modo giusto. Ma in certi contesti dovresti stare attento. Ad esempio, non aspettarti di poter rappresentare qualsiasi cosa tu legga da un flusso UTF-8 in un massimo di 4 byte. Se non è unicode, potrebbero essere necessari fino a 6 byte.
Hai * guardato * a risorse comuni, come [articolo UTF-8 di Wikipedia] (http://en.wikipedia.org/wiki/UTF-8), prima ... giusto? –
Ho letto diversi articoli che hanno dato risposte miste ... In realtà ho avuto l'impressione che la risposta fosse 3 quindi sono molto contento di aver chiesto – Edd
Qui lascerò un link di youtube, con Tom Scott's Personaggi, Simboli, Unicode miracolo: https: //goo.gl/sUr1Hf. Si arriva a sentire e vedere come tutto si sta evolvendo dalla codifica dei caratteri ASCII a utf-8. – Roylee