Comment fonctionne le texte Zalgo?

694

J'ai vu un texte étrangement formaté appelé Zalgo comme ci-dessous écrit sur divers forums. C'est un peu ennuyeux à regarder, mais ça me dérange vraiment parce que cela mine ma notion de ce qu'un personnage est censé être. Ma compréhension est qu'un personnage est censé se déplacer horizontalement sur une ligne et rester dans un certain "conteneur". Évidemment, le texte Zalgo se déplace verticalement et ne semble pas être limité à aucun espace.

Est-ce un bug / défaut / exploit / hack dans Unicode? Ces personnages individuels ont-ils des propriétés étranges? "Que se passe-t-il ici?


H̡̫̤̤̣͉̤ͭ̓̓̇͗̎̀ơ̯̗̱̘̮͒̄̀̈ͤ̀͡w͓̲͙͖̥͉̹͋ͬ̊ͦ̂̀̚ ͎͉͖̌ͯͅͅd̳̘̿̃̔̏ͣ͂̉̕ŏ̖̙͋ͤ̊͗̓͟͜e͈͕̯̮̙̣͓͌ͭ̍̐̃͒s͙͔̺͇̗̱̿̊̇͞ ̸̤͓̞̱̫ͩͩ͑̋̀ͮͥͦ̊Z̆̊͊҉҉̠̱̦̩͕ą̟̹͈̺̹̋̅ͯĺ̡̘̹̻̩̩͋͘g̪͚͗ͬ͒o̢̖͇̬͍͇͓̔͋͊̓ ̢͈͙͂ͣ̏̿͐͂ͯ͠t̛͓̖̻̲ͤ̈ͣ͝e͋̄ͬ̽͜҉͚̭͇ͅx͎̬̠͇̌ͤ̓̂̓͐͐́͋͡ț̗̹̝̄̌̀ͧͩ̕͢ ̮̗̩̳̱̾w͎̭̤͍͇̰̄͗ͭ̃͗ͮ̐o̢̯̻̰̼͕̾ͣͬ̽̔̍͟ͅr̢̪͙͍̠̀ͅǩ̵̶̗̮̮ͪ́? ̙͉̥̬͙̟̮͕ͤ̌͗ͩ̕͡


Mike
la source
31
en.wikipedia.org/wiki/Combining_character pourrait offrir des indices.
Lucas Jones
2
Cela pourrait aussi vous couper le souffle: en.wikipedia.org/wiki/…
Burhan Ali
3
Comme référence obligatoire, xkcd.com/1857
mackycheese21

Réponses:

431

Le texte utilise des caractères de combinaison, également appelés marques de combinaison. Voir la section 2.11 de Combinaison de caractères dans la norme Unicode (PDF).

Dans Unicode, le rendu des caractères n'utilise pas un modèle de cellule de caractère simple où chaque glyphe s'inscrit dans une boîte avec une hauteur donnée. La combinaison des marques peut être rendue au-dessus, en dessous ou à l'intérieur d'un caractère de base

Ainsi, vous pouvez facilement construire une séquence de caractères, composée d'un caractère de base et de marques «combinant au-dessus», de n'importe quelle longueur, pour atteindre la hauteur visuelle souhaitée, en supposant que le logiciel de rendu est conforme au modèle de rendu Unicode. Une telle séquence n'a bien sûr pas de sens, et même un singe pourrait la produire (par exemple, étant donné un clavier avec un pilote approprié).

Et vous pouvez mélanger les marques «combinaison ci-dessus» et «combinaison ci-dessous».

L'exemple de texte de la question commence par:

Jukka K. Korpela
la source
36
Unicode peut le faire parce qu'il n'est délibérément conforme à rien d'autre qu'à «l'utilisation réelle des caractères» - le logiciel devrait alors se conformer à Unicode. Et c'est pourquoi nous avons par exemple U+1F4A9.
Camilo Martin du
2
Juste pour ajouter à cela, voici une liste de combinaison de caractères utilisés ci-dessus ou à travers le texte pour générer du "texte Zalgo": zalgotextgenerator.com/unicode
VKK
270

Le texte Zalgo fonctionne grâce à la combinaison de caractères. Ce sont des caractères spéciaux qui permettent de modifier le caractère précédent.

entrez la description de l'image ici

OU

y + ̆ = y̆ qui est en fait

y + ̆ = y̆

Comme vous pouvez les empiler les uns sur les autres, vous pouvez produire les éléments suivants:


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

qui est en fait:

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

Il en va de même pour mettre des trucs en dessous:


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



c'est en fait:

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

En Unicode, le bloc principal de la combinaison des signes diacritiques pour les langues européennes et l'alphabet phonétique international est U + 0300 – U + 036F.

En savoir plus ici

Pour produire une liste de combinaison de signes diacritiques, vous pouvez utiliser le script suivant (car les liens continuent de mourir)

for(var i=768; i<879; i++){console.log(new DOMParser().parseFromString("&#"+i+";", "text/html").documentElement.textContent +"  "+"&#"+i+";");}

Consultez-les également



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

Matas Vaitkevicius
la source
2
comment taperiez-vous cela?
Aequitas
6
@Aequitas Si vous posez des questions sur les ALTcodes, vous ne pouvez pas le faire, vous colleriez simplement y&#x0306;&#x0306;là où il entre en HTML «pur» et le navigateur ferait sa magie ...
Matas Vaitkevicius
2
@barbsan Salut, merci de me le faire savoir, je l'ai remplacé par un script qui les génère.
Matas Vaitkevicius
Je me demande pourquoi avez-vous choisi cet exemple particulier de Y avec un tildae. Cela a en fait un sens en russe, je ne sais pas si vous êtes familier avec cela.
SergeyA
@SergeyA Je pense qu'il utilise cet exemple parce que c'est le même exemple que la page wikipedia liée ( en.wikipedia.org/wiki/Combining_character ) utilise.
Mischa