代码改变世界

神奇的字符

2012-05-31 17:07  Rollen Holt  阅读(3250)  评论(4编辑  收藏  举报

如果你看不到文章的图的话,可以去:你看不见图的话,去http://www.guokr.com/question/162799/
http://www.guokr.com/post/206023/

---------------------------

今天是世界无烟日好像,在微薄上发现了这个神奇的字符(̅_̅_̅(̅(̅_̅_̅_̅_̅_̅̅(ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็)

我一开始以为他是一张图片,最后发现不是,而且观察了一会,发现居然还能动好像,于是就觉的很神奇。这个确实是一个字符串。

如果你用微薄的话,你可以尝试着在输入框中写入:“ฐ้้ฐ้้้ฐ้้้้ฐ้้้้้ฐ้้้้้้ฐ้้้้้้้ฐ้้้้้้้้ฐ้้้้้้้้้ฐ้้้้้้้้้้ฐ้้้้้้้้้้้ฐ้้้้้้้้้้้้ฐ้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้”,你就会发现远远超出了140个字符了。

你如果用google搜索:(̅_̅_̅(̅(̅_̅_̅_̅_̅_̅̅(ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็) 你会发现页面很奇怪。

(็和ฐ้้,这两个“字符”其实都不只是一个字符。出现这个状况,大概就是设计字符时没有考虑到“帽子”和“声调”而产生的BUG。

这是泰文字符中的帽子字,它会叠加在主体字符上,出这个状况是字符bug

根据泰文的拼写规则,常将字符分为鞋子字符、帽子字符、主体字符、声调字符、独立字符、标点字符。【1】
图示中的 ส 编码为0E2A、即主体字符;所谓的“绕绕(็)“编码为0E47、即帽子字符。【2】
按照拼写规则,,帽子字符必须是叠加在主体字符之上的。因此,正常的泰文拼写应该是像”ส็“这样。
至于发射过远,应该是泰文编码时设计者未考虑到重复叠加”帽子“或者”声调“而产生的BUG。毕竟,主体字符上是可以叠加帽子字符的,帽子字符上又是可以叠加声调字符;再者,主体字符下还可以叠加鞋子字符,确实难以限定叠加层数。



至于如何显示,主体字符的Unicode 编码+声调字符(或者帽子字符)的Unicode 编码即可。比如答案开始的图形编码为:http://wo.tanbeta.com/?di=8LH8

【1】泰文排版规则:http://blog.sina.com.cn/s/blog_5d8cc6410100s2ux.html
【2】泰文(Thai) Unicode 编码表:http://www.nengcha.com/code/unicode/class/31/

把这个字符复制到word里,默认字体显示的是“Tahoma”。


我注意到很奇怪的一点,就是其他字符如果复制的话,会一下选中整个字符,而这个字符却可以选中一部分。如图,说明这个字符可能包含多个字符。


然后我试着改变字体,结果发现大多数字体都无法应用,最终发现少数可以用的字体,这才瞬间发现,原来这个字符的确是包含多个字符。

比如应用Symbol字体:


Webdings字体:


Wingdings


而且有趣的是,当你在以上这些字体下,增加或者减少第二个图案的数量,再切换到Tahoma字体,并不会影响这个字符。

推测这可能是Tahoma字体在处理特殊字符时产生的一个小bug。。。。。

这个效果主要是利用 Unicode U+0300 到 U+03FF 区的组合标记 (combining marks) 实现的,这些标记本身没有水平 advance,只会重叠在前一个非 combining mark 的字符上。

比如这里,其实组成就是首先一个 U+002E,也就是 .,然后放一堆 U+0338,也就是你看到的斜杠,这个斜杠也叫 NON-SPACING LONG SLASH OVERLAY,就是负责重叠在一起用的,它没有垂直 advance 也没有水平 advance,所以后一个字符总是会叠在前一个上面,越叠越黑;然后接着用 U+0328,也就是延伸到下面的一圈圈的图案,每个是其中的一环,这个字符叫 COMBINING OGONEK,它有垂直 advance 但没有水平 advance,所以后一个字符会接在前一个的下面而不是后面。第二组的原理是一样的,也是先放一个 . 然后接多个 U+0338 和 U+0328。
==============================
这是堆在一起的 3 种字符:
U+002E FULL STOP(就是西文句点)
U+0338 COMBINING LONG SOLIDUS OVERLAY(是用于和其他字符组合显示的 solidus,用于分数或金额的斜线 [1],我们一般都用 slash)
U+0328 COMBINING OGONEK(这是用于用于和拉丁字母组合显示的变音符号 [2])

一共有 2 个 U+002E,26 个 U+0338 和 14 个 U+0328:
U+002E U+0338 U+0338 U+0338 U+0338 U+0338 U+0338 U+0338 U+0338 U+0338 U+0338 U+0338 U+0338 U+0338 U+0338 U+0338 U+0338 U+0338 U+0338 U+0338 U+0338 U+0338 U+0338 U+0338 U+0338 U+0328 U+0328 U+0328 U+0328 U+0328 U+0328 U+0328 U+0328 U+0328 U+0328 U+0328 U+0328 U+002E U+0338 U+0338 U+0328 U+0328

U+0338 和 U+0328 都是用于「和其他字符组合显示的」字符,所以它们会附着在前一个字符上,它们的位置是相对于前一个字符来确定的。
所以,以 U+002E 为基础,后面的 U+0338 和 U+0328 都依次附着在前一个字符上,就成这样了。其它很多用特殊字符玩的奇怪图形的原理基本也都是这样。
==============================
所以说这其实不是“一个字符”,而是叠在一起的好多个字符,这一点从 google 的提示中也可以以看出来:“你的查询太冗长,请换较短字词再试”。另外还可以试试把这个东西粘贴到任何地方,然后用 backspace 键删掉,你会发现需要按大概 59 下才能删掉。

 

【以下为游戏测试区】全选下面的字符,上下左右拖拽鼠标试试?……上班的时候就用这个来代替切水果吧 = =
想玩更多,或者看别人做出的奇葩图案,来这里:http://www.guokr.com/post/206023/
————————————————————————————————





ฐ้้ฐ้้้ฐ้้้้ฐ้้้้้ฐ้้้้้้ฐ้้้้้้้ฐ้้้้้้้้ฐ้้้้้้้้้ฐ้้้้้้้้้้ฐ้้้้้้้้้้้ฐ้้้้้้้้้้้้ฐ้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้ฐ้้้้้้้้้ฐ้้้้้้้้้้ฐ้้้้้้้้้้้ฐ้้้้้้้้้้้้ฐ้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้





ฐ้้ฐ้้้ฐ้้้้ฐ้้้้้ฐ้้้้้้ฐ้้้้้้้ฐ้้้้้้้้ฐ้้้้้้้้้ฐ้้้้้้้้้้ฐ้้้้้้้้้้้ฐ้้้้้้้้้้้้ฐ้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้ฐ้้้้้้้้้ฐ้้้้้้้้้้ฐ้้้้้้้้้้้ฐ้้้้้้้้้้้้ฐ้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้

—————————————————————————————

你们能切成这样吗> <!

 

最后注明:本文参考自微博,果壳网,互联网。