b"\n_START_ARTICLE_\nUTF-8\n_START_SECTION_\nCenni storici\n_START_PARAGRAPH_\nUTF-8 \xc3\xa8 stato ideato da Ken Thompson e Rob Pike il 2 settembre 1992 su una tovaglietta in una tavola calda del New Jersey. Il giorno dopo Pike e Thompson l'hanno implementato e hanno aggiornato Plan 9, il loro Sistema operativo, per usarlo._NEWLINE_UTF-8 \xc3\xa8 stato presentato ufficialmente nel gennaio del 1993 a San Diego in occasione della conferenza annuale di Usenix.\n_START_SECTION_\nCaratteristiche generali\n_START_PARAGRAPH_\nUTF-8 usa da 1 a 4 byte per rappresentare un carattere Unicode. Per esempio un solo byte \xc3\xa8 necessario per rappresentare i 128 caratteri dell'alfabeto ASCII, corrispondenti alle posizioni Unicode da U+0000 a U+007F._NEWLINE_Quattro byte possono sembrare troppi per un solo carattere; tuttavia questo \xc3\xa8 richiesto solo per i caratteri che stanno fuori dal Basic Multilingual Plane, generalmente molto rari. Inoltre anche UTF-16 (la principale alternativa a UTF-8) richiede quattro byte per questi caratteri. Quale sia pi\xc3\xb9 efficiente, UTF-8 o UTF-16, dipende dall'intervallo di caratteri utilizzati, e l'uso di algoritmi di compressione tradizionali riduce in maniera significativa la differenza tra le due codifiche. Per brevi brani di testo, su cui gli algoritmi di compressione tradizionali non sono efficienti e una ridotta occupazione di memoria \xc3\xa8 importante si potrebbe utilizzare lo Schema di compressione standard per Unicode._NEWLINE_La IETF (Internet Engineering Task Force) richiede che tutti i protocolli Internet identifichino la codifica dei caratteri utilizzata, e che siano in grado di utilizzare almeno UTF-8.\n_START_SECTION_\nUTF-8 Modificato\n_START_PARAGRAPH_\nIl linguaggio di programmazione Java, che usa UTF-16 come rappresentazione interna dei caratteri, usa per la loro serializzazione su file una variazione non standard di UTF-8._NEWLINE_Ci sono due differenze tra la codifica UTF-8 standard e quella modificata. La prima differenza \xc3\xa8 che il carattere nullo (U+0000) viene rappresentato con due byte anzich\xc3\xa9 uno, nello specifico come 11000000 10000000 (0xC0 0x80). In questo modo ci si assicura che nessuna stringa codificata venga troncata prematuramente perch\xc3\xa9 contenente il byte null (0x00), interpretato da alcuni linguaggi di programmazione (ad esempio il C) come terminatore della stringa._NEWLINE_La seconda differenza riguarda la rappresentazione dei caratteri al di fuori del BMP (Basic Multilingual Plane). Utilizzando l'UTF-8 standard questi caratteri vengono rappresentati con 4 byte, secondo il formato nella tabella precedente. Con UTF-8 modificato questi caratteri vengono prima rappresentati come coppie surrogate (come in UTF-16) e successivamente entrambi gli elementi della coppia vengono codificati in UTF-8. Il motivo di questa differenza non \xc3\xa8 ovvio. In Java un carattere \xc3\xa8 lungo 16 bit, quindi alcuni caratteri Unicode devono essere rappresentati come sequenze di due caratteri. Questo aspetto del linguaggio \xc3\xa8 precedente all'introduzione dei piani supplementari in Unicode, ma \xc3\xa8 importante sia per fattori legati alle prestazioni, che per la retrocompatibilit\xc3\xa0, ed \xc3\xa8 quindi improbabile che venga corretto. L'encoding modificato assicura che una stringa codificata possa essere decodificata un carattere (a 16 bit) per volta, anzich\xc3\xa9 un carattere Unicode per volta. Sfortunatamente questo vuol dire che i caratteri che richiedono 4 byte per essere rappresentati in UTF-8, siano rappresentati in UTF-8 modificato con sequenze di 6 byte."