Los caracteres acentuados vuelven mal tras escribirlos
Un registro de texto declara qué codificación usa, y una herramienta que escribe una mientras otra supone algo distinto produce acentos destrozados al leer. Los caracteres están intactos en la etiqueta; lo que está mal es el acuerdo sobre cómo interpretarlos.
El registro declara su codificación
Un registro de texto lleva algo más que los caracteres. Lleva además una indicación de cómo están codificados esos caracteres, y un código de idioma.
Un lector usa esa indicación para convertir los bytes de vuelta en letras. Cuando la declaración y la realidad coinciden, los acentos vuelven exactamente como se escribieron.
Cuando no coinciden, los bytes están intactos y la interpretación está mal, razón por la cual el resultado sale destrozado en lugar de ausente.
Los caracteres fuera del rango latino sin acentos cuestan además más de un byte cada uno, así que el texto acentuado ocupa más sitio del que su número de caracteres sugiere.
Dónde se tuerce
Una herramienta de escritura que declara una codificación y escribe otra. La etiqueta se contradice entonces a sí misma y todos los lectores se equivocan.
Una herramienta de lectura que ignora la declaración y supone un valor por omisión. La etiqueta es correcta y un lector concreto la muestra mal.
Contenido pegado desde una fuente en otra codificación, que puede llegar a la herramienta de escritura ya dañado. La etiqueta guarda entonces con fidelidad unos caracteres que ya estaban mal antes de llegar.
Lee la etiqueta con una segunda herramienta para distinguir estos casos. Si dos lectores discrepan, la etiqueta está bien y uno de los lectores se equivoca. Si ambos coinciden en que está mal, la etiqueta contiene lo que se escribió.
Las direcciones son un caso aparte
Una dirección web no es texto libre. Los caracteres fuera del conjunto permitido tienen que codificarse con porcentajes, y una dirección con caracteres acentuados en bruto puede no funcionar aunque esté guardada perfectamente.
Algunas herramientas los codifican por ti y otras no, razón por la cual una dirección con una ruta acentuada puede comportarse de forma distinta según qué la escribiera.
Los nombres de dominio internacionalizados tienen su propia conversión, que hace el navegador y no la etiqueta.
La etiqueta guarda los caracteres con fidelidad en todos estos casos. Lo que varía es si lo guardado era una dirección válida.
Evitarlo por completo
Usa caracteres sin acentos en todo lo que se escriba directamente en una etiqueta cuando el significado lo sobreviva. No es elegante y elimina toda una clase de fallos.
Mantén el texto acentuado en una página y no en una etiqueta, y escribe una dirección corta en su lugar. Una página web controla su propia codificación y se muestra bien en todas partes.
Prueba con el texto real en un teléfono que no sea aquel con el que escribiste, porque una herramienta de escritura que lee su propia salida puede esconder una discrepancia.
Y comprueba la longitud tras cualquier cambio en contenido acentuado, porque esos caracteres cuestan más de un byte y un mensaje que cabía puede dejar de caber.
Preguntas frecuentes
¿La etiqueta está guardando los caracteres equivocados?
Normalmente no. Los bytes están intactos y la interpretación está mal, razón por la cual el resultado sale destrozado en lugar de en blanco.
¿Los acentos ocupan más espacio?
Sí. Los caracteres fuera del rango latino sin acentos cuestan más de un byte cada uno, así que el texto acentuado es mayor que su número de caracteres.
¿Por qué dos aplicaciones lo muestran distinto?
Porque una respeta la codificación declarada y la otra supone un valor por omisión. Esa discrepancia es la avería.
¿Puedo poner acentos en una URL de una etiqueta?
Necesitan codificarse con porcentajes para ser válidos, y no todas las herramientas lo hacen por ti. Una ruta sin acentos evita la cuestión.