奇葩字符 "a๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎" 的簡單分析


這個其實之前火過一陣子,當時也沒怎么注意,今天看到空間里又有人在刷這個字符了,所以決定分析下他是什么東西、
復制這個字符在控制台查看 "a๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎".length 發現他的長度是 20,怎么會是20呢?
我們依次調試  "a๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎".charAt(0), "a๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎".charAt(1), "a๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎".charAt(2)  可以發現第一個字符是a 后面都是其他什么東西組成的。

當你黏貼到notepad++之類的編輯器里,也會發現這個問題,后台那些是重復的字符,而且都可以看到。
這些字符到底是什么東西呢?

突然想起js聖經上貌似記載過一個 é 字符,他的 unicode 是 \u00e9, 但是也可以用 'e' + '\u0301' 實現 "é" 前者 length 是 1,后者 length 是 2。
'\u0301' 在這里起到了語調符的作用,然后我就喪心病狂的  'e'+Array(20).join('\u0301');  發現竟然成功了,果然是這個東西,但是這個語調符有哪些呢。
繼續尋找答案,在聖經的注釋里發現了他貌似屬於 Mn 類,去unicode官方找這個東西,一番尋找后終於找到他了,詳情請參閱

這里解釋了 Mn 其實是 a nonspacing combining mark (zero advance width) (谷歌翻譯: 一個非空格組合標志(零超前寬度))。
雖然給了解釋,但是還是沒有說他有那些字符啊,所以我繼續尋找答案,功夫不負有心人,終於找到了一張表。
Unicode Characters in the 'Mark, Nonspacing' Category 
這里詳細的列出了每個編碼以及對應的意思,還有圖片展現。你可以點擊頭部那個 View all images 超鏈接,這樣你就不必一個一個展開看圖片了。

找到這個的時候我欣喜諾狂,各種測試,發現不僅僅是向上,還有 向左,向下的,但是暫時沒發現向右的。
這里面有很多符號,雖然不知道他們在什么情況下使用,但是我的目的達到了,后續的東西暫時沒欲望刨根問底了。

下面是我找的幾個方向的小尾巴,大家也可以自己去各種測試起來。。

 '呵呵'+Array(20).join('\u0310');  // "呵呵̐̐̐̐̐̐̐̐̐̐̐̐̐̐̐̐̐̐̐"
 '呵呵'+Array(20).join('\u031D');             // "呵呵̝̝̝̝̝̝̝̝̝̝̝̝̝̝̝̝̝̝̝"
 '呵呵'+Array(20).join('\u0E47');                          // "呵呵็็็็็็็็็็็็็็็็็็็"
 '呵呵'+Array(20).join('\u0e49');                                       // "呵呵้้้้้้้้้้้้้้้้้้้"
 '呵呵'+Array(20).join('\u0598');        // "呵呵֘֘֘֘֘֘֘֘֘֘֘֘֘֘֘֘֘֘֘"

也可以這么玩...

 '呵呵'+Array(20).join('\u0310')+Array(20).join('\u0598')+Array(20).join('\u0e49');  // "呵呵้้้้้้้้้้้้้้้้้้้̐̐̐̐̐̐̐̐̐̐̐̐̐̐̐̐̐̐̐֘֘֘֘֘֘֘֘֘֘֘֘֘֘֘֘֘֘֘"

好了,今天的話題到此結束了。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM