Unicode asigna a cada carácter un número llamado punto de código, que se escribe U+0041 para la A. Hay 1 114 112 puntos de código posibles, repartidos en 17 planos de 65 536. Una codificación como UTF-8 o UTF-16 convierte los puntos de código en bytes. Busque caracteres con Inspector de Caracteres Unicode y limpie texto con Normalizador Unicode; la entrada del glosario es Unicode.
UTF-8 en una tabla
UTF-8 es retrocompatible con ASCII (los primeros 128 puntos de código ocupan un byte, idéntico a ASCII), se autosincroniza (se puede hallar el límite de un carácter desde cualquier byte) y es la opción por defecto en la web. UTF-16 usa 2 bytes para la mayoría de caracteres y un par sustituto de dos unidades de 2 bytes para los puntos de código por encima de U+FFFF, como los emoji.
| Intervalo de puntos de código | Bytes | Patrón de bits |
|---|---|---|
| U+0000 → U+007F | 1 | 0xxxxxxx |
| U+0080 → U+07FF | 2 | 110xxxxx 10xxxxxx |
| U+0800 → U+FFFF | 3 | 1110xxxx 10xxxxxx 10xxxxxx |
| U+10000 → U+10FFFF | 4 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
Ejemplos comprobados
| Carácter | Punto de código | UTF-8 (hex) | UTF-16 (hex) |
|---|---|---|---|
| A | U+0041 |
41 |
0041 |
| é | U+00E9 |
c3 a9 |
00e9 |
| € | U+20AC |
e2 82 ac |
20ac |
| 😀 | U+1F600 |
f0 9f 98 80 |
d83d de00 |
Un carácter, varios puntos de código
épuede ser un punto de código (U+00E9) o dos:emás un acento agudo combinante (U+0301). El texto se ve igual pero su longitud es 1 o 2, y una comparación simple falla. La normalización convierte ambos a una sola forma: NFC compone, NFD descompone; NFKC y NFKD también unifican los caracteres de compatibilidad (fipasa afi,²pasa a2).- Lo que la gente ve como un carácter (un grupo de grafemas) puede ser muchos puntos de código: el emoji de familia son 5 puntos de código unidos por conectores de ancho cero y ocupa 18 bytes en UTF-8.
- La longitud de una cadena depende de la unidad: bytes, unidades UTF-16, puntos de código o grafemas pueden diferir para el mismo texto.
Mojibake y otras trampas
- Mojibake: bytes UTF-8 leídos como Latin-1 convierten
naïveennaïve. Declare siempre la codificación (<meta charset="utf-8">, una cabecera HTTP o el ajuste del editor). - Los caracteres invisibles (espacios de ancho cero, controles bidireccionales) pueden esconderse en texto copiado y en identificadores; encuéntrelos con Detector de Caracteres Invisibles.
- Parecidos: la
аcirílica no es laalatina. Los nombres de dominio lo resuelven con Punycode, vea Punycode. - Una marca de orden de bytes UTF-8 (
EF BB BF) al principio de un archivo está permitida, pero casi siempre sobra.