Ci sono due differenze tra la codifica UTF-8 standard e quella modificata. La prima differenza è che il carattere nullo (U+0000) viene rappresentato con due byte anziché uno, nello specifico come 11000000 10000000 (0xC0 0x80). In questo modo ci si assicura che nessuna stringa codificata venga troncata prematuramente perché contenente il byte ''null'' (0x00), interpretato da alcuni linguaggi di programmazione (ad esempio il [[Linguaggio_C|C]]) come terminatore della stringa.
La seconda differenza riguarda la rappresentazione dei caratteri al di fuori del BMP (''Basic Multilingual Plane''). UtilizzantoUtilizzando 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 è ovvio. In Java un carattere è lungo 16 bit, quindi alcuni caratteri Unicode devono essere rappresentati come sequenze di due caratteri. Questo aspetto del linguaggio è precedente all'introduzione dei piani supplementari in Unicode, ma è importante sia per fattori legati alle prestazioni, che per la compatibilità all'indietro, ed è quindi improbabile che venga corretto. L'encoding modificato assicura che una stringa codificata possa essere decodificata un carattere (a 16 bit) per volta, anziché 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.