¿Cómo funciona el texto Zalgo?
He visto un texto con un formato extraño llamado Zalgo, como el siguiente, escrito en varios foros. Es un poco molesto de ver, pero realmente me molesta porque socava mi noción de lo que se supone que es un personaje. Según tengo entendido, se supone que un personaje debe moverse horizontalmente a través de una línea y permanecer dentro de un determinado "contenedor". Obviamente el texto de Zalgo se mueve verticalmente y no parece estar restringido a ningún espacio.
¿Es esto un error/fallo/explotación/truco en Unicode? ¿Son estos personajes individuales con propiedades extrañas? "¿Que está sucediendo aquí?
H̡̫̤̤̣͉̤ͭ̓̓̇͗̎̀ơ̯̗̱̘̮͒̄̀̈ͤ̀͡w͓̲͙͖̥͉̹͋ͬ̊ͦ̂̀̚ ͎͉͖̌ͯͅͅd̳̘̿̃̔̏ͣ͂̉̕ŏ ̖̙͋ͤ̊͗̓͟͜e͈͕̯̮̙̣͓͌ͭ̍̐̃͒s͙͔̺͇̗̱̿̊̇͞ ̸̤͓̞̱̫ͩͩ͑̋̀ͮͥͦ̊Z̆̊҉҉̠̱̩͕͕̹̯̋ ̺̹ĺ̡̘̹̻̩̩͋͘g̪͚͗ͬ͒o̢̖͇̬͍͇͓̔͋͊̓ ̢͈͙͂ͣ̏̿͐͂ͯ͠t̛͓̖̲ͤ̈ͣ͝e͋̄ͬ̽͜҉͚̭͇ͅx ͎̬̠͇̌ͤ̓̂̓͐͐́͋͡ț̗̹̝̄̌̀ͧͩ̕͢ ̮̗̩̳̱̾w͎̭̤͍͇̰̄͗ͭ̃͗ͮ̐o̢̢̯̻̰̼͕̪̾ͣͬ̽̔̍͟ͅ ͙͍̠ǩ̵̶̗̮̮ͪ́?̙͉̥̬͙̟̮͕ͤ̌͗ͩ̕͡
El texto utiliza caracteres combinados, también conocidos como marcas combinadas. Consulte la sección 2.11 de Combinación de caracteres en el estándar Unicode (PDF).
En Unicode, la representación de caracteres no utiliza un modelo de celda de carácter simple donde cada glifo cabe en un cuadro con una altura determinada. Las marcas combinadas se pueden representar encima, debajo o dentro de un carácter base.
Por lo tanto, puede construir fácilmente una secuencia de caracteres, que consta de un carácter base y marcas "combinadas arriba", de cualquier longitud, para alcanzar la altura visual deseada, suponiendo que el software de renderizado se ajuste al modelo de renderizado Unicode. Por supuesto, una secuencia así no tiene significado, e incluso un mono podría producirla (por ejemplo, si se le diera un teclado con el controlador adecuado).
Y puede mezclar las marcas "combinando arriba" y "combinando abajo".
El texto de muestra de la pregunta comienza con:
- LETRA H MAYÚSCULA LATINA -
H
- COMBINANDO LETRA T MINÚSCULA LATINA -
ͭ
- COMBINANDO KORONIS GRIEGOS -
̓
- COMBINANDO COMA ARRIBA -
̓
- COMBINANDO EL PUNTO ARRIBA -
̇
El texto de Zalgo funciona gracias a la combinación de caracteres. Estos son caracteres especiales que permiten modificar el carácter que viene antes.
O
y + ̆ = y̆ que en realidad es
y + ̆ = y̆
Como puedes apilarlos uno encima del otro, puedes producir lo siguiente:
y̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆
que en realidad es:
y̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆
Lo mismo ocurre con poner cosas debajo:
y̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆
que en realidad es:
y̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆
En Unicode, el bloque principal para combinar signos diacríticos de idiomas europeos y el alfabeto fonético internacional es U+0300–U+036F.
Más sobre esto aquí
Para producir una lista de combinación de signos diacríticos, puede utilizar el siguiente script (ya que los enlaces siguen muriendo)
for(var i=768; i<879; i++){console.log(new DOMParser().parseFromString("&#"+i+";", "text/html").documentElement.textContent +" "+"&#"+i+";");}
Échales un vistazo también
Mͣͭͣ̾ Vͣͥͭ͛ͤͮͥͨͥͧ̾