Zalgo文字如何工作?


693

我在各个论坛上都看到过奇怪的格式化文本Zalgo,如下所示。看起来很烦人,但它确实使我感到困扰,因为它破坏了我对角色应该是什么样的观念。我的理解是,角色应该在一条线上水平移动并停留在某个“容器”内。显然,Zalgo文本是垂直移动的,似乎不受任何空间限制。

这是Unicode中的错误/缺陷/漏洞利用/黑客吗?这些单个字符是否具有怪异的属性?“什么”在这里发生?


̡̫̤̤̣͉̤͎͉͖ͭ̓̓̇͗̎̀͋ͬ̌ͯͅͅ ̳̘̿̃̔̏ͣ͂̉̕ ̸͎͉͖̖̙̤͓̞̱̫̌ͯ̆͋ͤ͗̓͟͜ͅͅ ̸̤͓̞̱̫ ̸̤͓̞̱̫ ̸̤͓̞̱̫ ̸̤͓̞̱̫ ̛͓̖̻̲ͤ̈ͣ͝ ̛͓̖̻̲ͤ̈ͣ͝ ̛͓̖̻̲ͤ̈ͣ͝ ̛͓̖̻̲ͤ̈ͣ͝ ̛͓̖̻̲ͤ̈ͣ͝ ̛͓̖̻̲ͤ̈ͣ͝ ̛͓̖̻̲ͤ̈ͣ͝ ̵̶̵̶̵̶̛͓̖̻̲̗̮̮̗̮̮̗̮̮ͤ̈ͣ͝




2
:这也可能会打击你的心en.wikipedia.org/wiki/...
伯汉·阿里

3
作为强制性参考,xkcd.com / 1857
mackycheese21

Answers:


430

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

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

因此,只要渲染软件符合Unicode渲染模型,您就可以轻松构造一个字符序列,该字符序列由任意长度的基本字符和“上面的组合”标记组成,以达到任何所需的视觉高度。这样的序列当然没有意义,甚至猴子也可以产生它(例如,给键盘一个合适的驱动器)。

您可以混合“在上方组合”和“在下方组合”标记。

问题中的示例文本以以下内容开头:


36
Unicode之所以能够做到这一点,是因为它故意只符合“字符的实际使用情况”,然后才有望符合Unicode。这就是为什么我们有例如U+1F4A9
卡米洛·马丁

2
补充一下,下面是上面使用的组合字符列表,或通过文本生成“ Zalgo文本”的方法:zalgotextgenerator.com/unicode
VKK

269

Zalgo文本之所以有效,是因为结合了字符。这些是特殊字符,允许修改之前出现的字符。

在此处输入图片说明

要么

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ͣͥͭ͛ͤͮͥͨͥͧ̾


2
您将如何键入?
Aequitas

6
@Aequitas如果您询问ALT代码,那么您就不能这样做,您只需将其粘贴y&#x0306;&#x0306;到“纯” html中,然后浏览器就可以实现神奇的效果……
Matas Vaitkevicius

2
@barbsan您好,感谢您告诉我,我已将其替换为生成它们的脚本。
Matas Vaitkevicius

我不知道您为什么选择带有tildae的Y这个特殊示例。它实际上在俄语中有一些含义,不确定您是否熟悉。
SergeyA

@SergeyA我认为他使用了此示例,因为它是链接的维基百科页面(en.wikipedia.org/wiki/Combining_character)使用的同一示例。
Mischa
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.