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̢̪͙͍̠̀ͅǩ̵̶̗̮̮ͪ́? ̙͉̥̬͙̟̮͕ͤ̌͗ͩ̕͡
Respuestas:
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:
H
ͭ
̓
̓
̇
fuente
U+1F4A9
.El texto de Zalgo funciona debido a la combinación de caracteres. Estos son caracteres especiales que permiten modificar el carácter anterior.
O
y + ̆ = y̆ que en realidad es
Como puede apilarlos uno encima del otro, puede producir lo siguiente:
y̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆
que en realidad es:
Lo mismo vale para poner cosas debajo:
y̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆
eso de hecho es:
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)
También échales un vistazo
Mͣͭͣ̾ Vͣͥͭ͛ͤͮͥͨͥͧ̾
fuente
ALT
códigos, entonces no puede hacer eso, simplemente pegaríay̆̆
donde entra en html 'puro' y el navegador haría su magia ...