微信上“XX撤回一条消息并向你扔了一台锤子手机”的魔法是什么原理

昨天,玩high了!你可能注意到微信群里有人撤回了一条消息,但是撤回的提示好像有哪里不对…

IMG_6878

很多人都玩得不亦乐乎,甚至马上就有教程和生成器流了出来。

然而这其实并不是微信更新的一个新功能,于是当大家玩得正开心的时候,微信以迅雷不及掩耳盗铃之势把这个Bug修复了(不过之前修改过的依然可以这样玩)。

我知道你意犹未尽还有些好奇,为什么可以这么玩,又是怎样的一个原理呢?朋友圈有机智的小伙伴给出了这样的解释,我知道你看不懂,我们通俗的解释一下。

Unicode

我们平时在手机上打出来的字并不是你们简单看到的字,而是由一堆编码组成的。这个编码非常容易被篡改,所以当你修改了编码,呈现出来好像字没变,但实际上最终展示的顺序就会发生变化。所以你会在聊天主页面看见经过这样设置的人发的消息都是反过来的,因为他加入特殊字符后本来呈现出来的就是反的。但是通知栏推送和主界面下这些就是原始的顺序,到聊天界面就会经过编码,呈现出正常的顺序。

3

当我们撤回一条消息的时候,按照规则就会获取已经被做了手脚的文字中的姓名了,但你又会疑惑,为何会有XX撤回一条消息并XXX这样被分开呢,如果只是单纯反过来展示文字。其实很简单,就是加了一个分隔符,把你的昵称和增加的文字分开。让昵称正常显示,让增加的文字从右往左显示。

电脑看到的过程是这样的:

“小明”撤回了一条消息——>增加自定义文字了饭吃去后然,变成“小明”了饭吃去后然撤回了一条消息——>让自定义的文字从右往左显示,于是这些字就跑到了整句的最后面——>“小明”撤回了一条消息然后去吃饭了

但你可能会觉得为何微信要支持反着来?因为微信是一个国际化的产品,支持阿拉伯语,而阿拉伯语是从右往左读的。为了兼容这种阅读习惯,微信便支持这种转换的字符。所以微信只要禁止昵称修改使用这个让文字翻转的字符就可以了。

那为什么之前没人发现,现在才有人玩?不,之前就可以玩,只是你不知道,而且还有很多种玩法。比如:

test

还有你们熟悉的瘦子的字体特别小的玩法…(缩小字符!)

silm

这些都是利用了 Unicode 开发出来的各种玩法。如果你懂代码还有创意,还可以开发出各种新的玩法来。

订阅更多文章