¿Cómo funciona el texto de Zalgo?

694

He visto textos extrañamente formateados llamados Zalgo, como se muestra a continuación, escritos 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. Tengo entendido que se supone que un personaje se mueve horizontalmente a través de una línea y permanece dentro de un cierto "contenedor". Obviamente, el texto de Zalgo se mueve verticalmente y no parece estar restringido a ningún espacio.

¿Es esto un error / defecto / explotación / pirateo 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̢̯̻̰̼͕̾ͣͬ̽̔̍͟ͅr̢̪͙͍̠̀ͅǩ̵̶̗̮̮ͪ́? ̙͉̥̬͙̟̮͕ͤ̌͗ͩ̕͡


Miguel
fuente
31
en.wikipedia.org/wiki/Combining_character podría ofrecer algunas pistas.
Lucas Jones
2
Esto también puede sorprenderle: en.wikipedia.org/wiki/…
Burhan Ali
3
Como referencia obligatoria, xkcd.com/1857
mackycheese21

Respuestas:

431

El texto usa 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 caracteres simple donde cada glifo cabe en un cuadro con una altura determinada. Las marcas combinadas se pueden representar arriba, abajo o dentro de un carácter base

Por lo tanto, puede construir fácilmente una secuencia de caracteres, que consiste en un carácter base y las marcas "combinadas arriba", de cualquier longitud, para alcanzar cualquier altura visual deseada, suponiendo que el software de renderizado se ajuste al modelo de renderizado Unicode. Tal secuencia no tiene ningún significado, por supuesto, e incluso un mono podría producirla (por ejemplo, si se le da un teclado con un controlador adecuado).

Y puede mezclar las marcas "combinar arriba" y "combinar abajo".

El texto de muestra en la pregunta comienza con:

Jukka K. Korpela
fuente
36
Unicode puede hacer esto porque no se ajusta deliberadamente a nada más que al "uso real de los personajes": se espera que el software se ajuste a Unicode. Y es por eso que tenemos, por ejemplo, U+1F4A9.
Camilo Martin
2
Solo para agregar a esto, aquí hay una lista de los caracteres combinados que se usan arriba, o mediante el texto para generar "Texto Zalgo": zalgotextgenerator.com/unicode
VKK
270

El texto de Zalgo funciona debido a la combinación de caracteres. Estos son caracteres especiales que permiten modificar el carácter anterior.

ingrese la descripción de la imagen aquí

O

y + ̆ = y̆ que en realidad es

y + ̆ = y̆

Como puede apilarlos uno encima del otro, puede producir lo siguiente:


y̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆

que en realidad es:

y̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆

Lo mismo vale para poner cosas debajo:


y̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆



eso de hecho es:

y̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆

En Unicode, el bloque principal de combinación de signos diacríticos para 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 usar 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+";");}

También échales un vistazo



Mͣͭͣ̾ Vͣͥͭ͛ͤͮͥͨͥͧ̾

Matas Vaitkevicius
fuente
2
¿Cómo escribirías eso?
Aequitas
66
@Aequitas Si está preguntando acerca de los ALTcódigos, entonces no puede hacer eso, simplemente pegaría y&#x0306;&#x0306;donde entra en html 'puro' y el navegador haría su magia ...
Matas Vaitkevicius
2
@barbsan Hola, gracias por avisarme, lo he reemplazado con un script que los genera.
Matas Vaitkevicius el
Me pregunto por qué elegiste este ejemplo particular de Y con tilda. En realidad tiene algún significado en ruso, no estoy seguro si está familiarizado con eso.
SergeyA
@SergeyA Creo que usa este ejemplo porque es el mismo ejemplo que está usando la página vinculada de wikipedia ( en.wikipedia.org/wiki/Combining_character ).
Mischa