El estándar Unicode tiene suficientes puntos de código que necesita 4 bytes para almacenarlos todos. Eso es lo que hace la codificación UTF-32. Sin embargo, la codificación UTF-8 de alguna manera los exprime en espacios mucho más pequeños mediante el uso de algo llamado "codificación de ancho variable".¿Cómo funciona la codificación de ancho variable UTF-8?
De hecho, se las arregla para representar los primeros 127 caracteres de US-ASCII en un solo byte que se ve exactamente como ASCII real, por lo que puede interpretar mucho texto ascii como si fuera UTF-8 sin hacerle nada . Buen truco. ¿Entonces, cómo funciona?
voy a preguntar y responder a mi propia pregunta aquí porque acabo de hacer un poco de lectura para averiguarlo y pensé que podría salvar a otra persona algún tiempo. Además, tal vez alguien me puede corregir si tengo algo de malo.
Straight Unicode does * not * requiere 32 bits para codificar todos sus puntos de código. Una vez reclamaron muchos posibles puntos de código, pero después de que despegó UTF-8, se limitaron intencionalmente a 21 bits, de modo que UTF-8 nunca excederá los 4 bytes por carácter. Actualmente, Unicode requiere solo 17 bits para contener todos los puntos de código posibles. Sin esta limitación, UTF-8 podría haber ido a 6 bytes por carácter. –
@ Warren: mayormente preciso, pero Unicode es un código de 21 bits (U + 0000 a U + 10FFFF). –
@ Warren: el UTF-8 de 4 bytes podría haber sido compatible con U + 1FFFFF. La restricción a U + 10FFFF se realizó por el bien de UTF-16. – dan04