我在各种论坛上看到过类似下面这样的奇怪的Zalgo格式的文本。这看起来有点烦人,但它真的让我很困扰,因为它破坏了我对角色应该是什么样子的概念。我的理解是,角色应该在一条线上水平移动,并停留在一个特定的“容器”中。显然,Zalgo文本是垂直移动的,似乎不受任何空间的限制。

这是Unicode中的一个bug/缺陷/利用/黑客吗?这些独立的角色是否具有奇怪的属性?这里发生了什么?

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


文本使用组合字符,也称为组合符号。请参阅Unicode标准字符组合(PDF)第2.11节。

在Unicode中,字符呈现不使用简单的字符单元模型,其中每个字形都适合一个具有给定高度的框。组合标记可以呈现在基本字符的上方、下方或内部

因此,假设渲染软件符合Unicode渲染模型,您可以轻松地构造一个字符序列,由一个基本字符和“组合以上”标记组成,长度为任何长度,以达到任何期望的视觉高度。这样的序列当然没有任何意义,甚至一只猴子也能做出来(例如,给定一个带有合适驱动程序的键盘)。

你还可以混合使用“上方组合”和“下方组合”的标记。

问题中的示例文本以:

拉丁大写字母H - H 组合拉丁小字母T - ͭ 结合希腊语KORONIS - ̓ 组合逗号:̓ 组合DOT ABOVE - ̇


Zalgo文本工作,因为组合字符。这些是特殊字符,允许修改前面的字符。

OR

Y +̆= Y̆

y + ̆ = y̆

因为你可以把它们一个叠在另一个上面,你可以得到以下结果:

呃冕啦��

实际上是:

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

把东西放在下面也一样:

呃̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆�

实际上就是:

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

在Unicode中,将欧洲语言的变音符和国际音标组合在一起的主要块是U+ 0300-U +036F。

更多信息请点击这里

要生成一个组合变音符标记的列表,您可以使用以下脚本(因为链接不断消失)

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

也可以看看

Mۣۭۦ̾ Vۥۥۭۛۤۥۨۥۧ̾