¿Qué es esto y por qué apagó mi iPhone? ¿Como funciona?

Esta es una secuencia corrupta de caracteres Unicode que desencadena un error en iOS.


Unicode es la codificación , o “lenguaje”, que usan las computadoras para describir el texto. Las computadoras no entienden el texto de forma nativa, solo listas de números, por lo que utilizamos un simple truco para describir el texto a una computadora: simplemente asigne un número a cada letra o símbolo, y luego represente un fragmento de texto como una lista de números. Por ejemplo, si el espacio es 0, “A” es 1, “B” es 2, etc., entonces “ATTACK AT DAWN” es “1 20 20 1 3 11 0 1 20 0 4 1 23 14”.

En el mundo real, por supuesto, no es tan simple como la codificación 0-26 anterior. Incluyendo espacio, tabulación y nueva línea, y contando mayúsculas y minúsculas por separado, hay 97 símbolos que se pueden escribir en cualquier teclado estándar de EE. UU. Eso no cuenta caracteres acentuados, signos de puntuación en idiomas extranjeros como ¿o «, símbolos matemáticos y otros símbolos especializados, idiomas con conjuntos de caracteres completamente diferentes como cirílico, árabe o los dos conjuntos fonéticos japoneses (hiragana y katakana), o los miles de caracteres en idiomas derivados del chino. Incluso hay guiones muertos como jeroglíficos y cuneiformes que a los académicos les encantaría poder digitalizar.

En los primeros días, los fabricantes de computadoras inventaban sus propias codificaciones. Por lo general, estas codificaciones serían bastante similares, y diferentes compañías estarían de acuerdo con las codificaciones para un país en particular, pero no siempre: ¡Japón, por ejemplo, tenía dos codificaciones separadas y completamente incompatibles! Y estas codificaciones generalmente admitirían solo el idioma local y tal vez un texto básico en inglés sin acento; una computadora rusa nunca admitiría árabe, por ejemplo.

Esto fue un desastre incluso en los años 80 y principios de los 90, pero el auge de Internet hizo que la situación fuera completamente insostenible. Entonces, el Consorcio Unicode formó y comenzó el difícil trabajo de diseñar una codificación que pudiera representar cualquier lenguaje.

Lo que salió de ese proceso fue necesariamente complicado. Por ejemplo, los acentos en Unicode son “caracteres combinados”, son números separados, pero modifican el carácter anterior, por lo que si “30” es el número de “` “, entonces” 1 30 “significa” À “, pero Para facilitar la conversión de ciertas codificaciones antiguas a Unicode, también hay caracteres “precompuestos” de un solo número para muchas combinaciones de acento de letras. Debido a que Unicode representa los dos idiomas escritos de izquierda a derecha (como el inglés) y de derecha a izquierda (como el árabe), hay caracteres que cambian la dirección del siguiente texto. Y resultó que hay muchos más caracteres en lenguajes humanos que los 65,000 más o menos planeados originalmente, por lo que han expandido Unicode de 1 a 17 “planos” de caracteres, con un complicado sistema de “par sustituto” para representar caracteres fuera del “plano multilingüe básico” original.

(Por cierto, el Consorcio Unicode todavía funciona hoy. El proceso de codificación de caracteres derivados de chino aún no ha terminado, y se agregan nuevos idiomas y caracteres cada año o dos. El Consorcio Unicode es incluso responsable de decidir qué debe convertirse en un emoji .)

En resumen, Unicode es un desastre complicado con muchas características diferentes. Cualquier implementación está destinada a contener algunos errores. Y parece que iOS tiene uno.


El texto Unicode que muestra aquí incluye una mezcla de caracteres latinos, árabes y chinos, junto con varias vocales combinadas de Devanagari, un conjunto de caracteres utilizado para los idiomas indios. Sin embargo, debido a que estas vocales indias están al lado del texto árabe, no pueden combinarse correctamente con los caracteres adyacentes, por lo que se muestran con círculos punteados encima de ellos.

Algo sobre esta combinación particular de caracteres desencadena un error en el manejo Unicode de iOS, causando bloqueos, reinicios y otros comportamientos erróneos. Debido a que este tipo de combinación nunca aparecería en ningún texto significativo, Apple no captó el problema antes de enviarlo.

Se dice que Apple está trabajando en una corrección de errores de emergencia y estará disponible pronto. Pero en realidad hay una buena posibilidad de que haya más errores como este acechando en su subsistema Unicode. Ese es el costo de soportar todas las formas de lenguaje escrito que alguna vez haya utilizado una sociedad humana. A veces, dos características oscuras no funcionarán juntas.