Qué es UTF-8
Todo texto en un dispositivo se guarda como números. Unicode es la gran lista que asigna a cada carácter un número, llamado punto de código. La letra A es U+0041, é es U+00E9, ñ es U+00F1 y el símbolo del euro € es U+20AC. UTF-8 es la regla que convierte esos puntos de código en bytes.
UTF-8 es la codificación estándar de la web, de JSON, de la mayoría de los lenguajes de programación y de los sistemas operativos modernos. Su mejor cualidad es que el texto ASCII básico no cambia: A sigue siendo el byte 41. Los demás caracteres usan dos, tres o cuatro bytes, y cada uno de esos bytes vale 128 o más, así que nunca se confunden con ASCII.
Cómo codificar y decodificar UTF-8
Codificar. Escribe en el cuadro Texto. Los bytes UTF-8 aparecen en el cuadro Bytes UTF-8. Pulsa Copiar para llevártelos.
Decodificar. Pega bytes en el cuadro Bytes UTF-8. Los caracteres aparecen a la izquierda. Asegúrate de que el Formato de bytes coincide con lo que pegas.
Formato de bytes ofrece seis formas de escribir los bytes:
- Bytes en hex: C3 A9 para leer y depurar
- Escapes: \xC3\xA9 para cadenas literales en código
- Porcentaje: %C3%A9 como en las direcciones web
- Decimal: 195 169 para arrays de bytes
- Binario: 11000011 10101001 para aprender cómo se colocan los bits
- Texto roto: é (arreglar mojibake) para reparar texto que se leyó con la codificación equivocada
Carácter por carácter. La tabla bajo la herramienta muestra cada carácter con su punto de código, sus bytes UTF-8 y el número de bytes. El resumen indica el total de caracteres y de bytes. Los espacios, las tabulaciones y los saltos de línea aparecen con su nombre para que puedas verlos.
Cómo funciona UTF-8
El número de bytes depende del tamaño del punto de código:
| Puntos de código | Bytes | Patrón de bits |
|---|---|---|
| U+0000 a U+007F | 1 | 0xxxxxxx |
| U+0080 a U+07FF | 2 | 110xxxxx 10xxxxxx |
| U+0800 a U+FFFF | 3 | 1110xxxx 10xxxxxx 10xxxxxx |
| U+10000 a U+10FFFF | 4 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
El primer byte indica cuántos bytes le siguen. Todos los bytes siguientes empiezan por 10. Eso hace que UTF-8 se sincronice solo: un programa siempre puede encontrar el inicio del siguiente carácter, incluso en mitad de un flujo de datos.
Todas las letras propias del español están en el rango de dos bytes. Por ejemplo, España se codifica como 45 73 70 61 C3 B1 61: seis caracteres y siete bytes. El signo ¿ es U+00BF (C2 BF) y la Ñ es U+00D1 (C3 91).
Ejemplos
| Carácter | Punto de código | UTF-8 en hex | Decimal |
|---|---|---|---|
A |
U+0041 | 41 |
65 |
é |
U+00E9 | C3 A9 |
195 169 |
ñ |
U+00F1 | C3 B1 |
195 177 |
ß |
U+00DF | C3 9F |
195 159 |
€ |
U+20AC | E2 82 AC |
226 130 172 |
日 |
U+65E5 | E6 97 A5 |
230 151 165 |
| emoji de pulgar arriba | U+1F44D | F0 9F 91 8D |
240 159 145 141 |
Arreglar el mojibake
El mojibake es el revoltijo de caracteres que ves cuando unos bytes UTF-8 se leen como Windows-1252 o Latin-1. Cada byte se convierte en un carácter distinto, así que las letras de dos bytes se transforman en dos símbolos raros:
| Texto correcto | Se ve como |
|---|---|
café |
café |
naïve |
naïve |
It’s |
It’s |
€ |
€ |
En español es un problema muy común, porque casi cada frase tiene una tilde o una ñ. Estos son resultados reales de la herramienta: año se ve como año, canción como canción, España como España y ¿Qué? como ¿Qué?. Si ves una à o una  donde debería haber una vocal con tilde, una ñ o un signo de apertura, casi seguro es mojibake.
El formato Texto roto deshace este error. Convierte cada carácter estropeado en su byte y decodifica los bytes como UTF-8. Si el texto contiene caracteres que no pueden venir de este error, la herramienta te avisa en lugar de adivinar.
Consejos y límites
- Guarda los archivos en UTF-8. La mayor parte del mojibake empieza con un archivo guardado en una codificación y abierto en otra. En los editores, elige UTF-8 al guardar.
- Declara la codificación. En HTML, pon
<meta charset="utf-8">al principio de la página. - Excel y los archivos CSV. Las versiones antiguas de Excel intentan adivinar la codificación de un CSV. Guardar como “CSV UTF-8” evita las tildes rotas.
- El arreglo funciona una vez. Un texto que se estropeó dos veces necesita aplicar el arreglo dos veces.
- La tabla muestra hasta 500 caracteres para que la página siga siendo rápida. El recuento de bytes siempre abarca el texto completo.
Otras formas de hacerlo
Python. 'café'.encode('utf-8') devuelve b'caf\xc3\xa9'. Para arreglar el mojibake, 'café'.encode('cp1252').decode('utf-8') devuelve café.
JavaScript. new TextEncoder().encode('é') devuelve los bytes 195 y 169. new TextDecoder().decode(bytes) los convierte de nuevo en texto.
Línea de comandos. echo -n é | xxd muestra los bytes c3a9 en un terminal UTF-8. iconv -f WINDOWS-1252 -t UTF-8 convierte archivos completos.
Herramientas relacionadas
Para decodificar bytes en hexadecimal sin más, usa el convertidor de hexadecimal a texto. Los bytes con codificación porcentual de los enlaces se decodifican con la herramienta para decodificar URL. Para ver todos los bits, prueba el traductor de código binario.