去年微信爆出的《你女朋友撤回了一条消息还亲了你一口》那个 bug,让广大微信用户 excited
了一把。
今天,小明在微信群和朋友圈看到了这样因缺思婷的消息:
消息栏里显示乱码,朋友圈也在玩:
此时,已到下班时间,但是你们都懂的,我是一个对技术敏感而细致的男人,对技术的由衷渴望明显战胜了凡夫俗子的食欲。
在第一时间知会微信总舵主张小龙后,我马上开始研究这个有趣的乱码。
经过一番调试后,小明发现是 u"\u0489"
这个 unicode 字符 ҉
搞得鬼,它有一个诡异的名字叫 COMBINING CYRILLIC MILLIONS SIGN
,翻译成国语就是 可拼接的西里尔修饰符字母
。
那么,问题又来了,什么是西里尔字母
? 谷歌一下:
西里尔字母主要在俄罗斯、东欧、北亚和中亚等国家使用。截至2011年,欧亚大陆约有2.52亿人使用它作为本国语言的官方字母表,俄罗斯约占其中一半。
……
西里尔语源自希腊语,现代学者认为,西里尔是由西里尔和迪乌斯的早期门徒发展和形式化的。
18世纪初,在俄罗斯使用的西里尔字母由彼得大帝重新改革,新形式的字母变得更接近拉丁字母,几个古老的字母被删除,几个字母是由彼得大帝亲自设计的(如Я,灵感来自拉丁语R)。
(҉,u0489
)是西里尔字符系统中的一个修饰词,它无法独立显示,当附着在其他字符前面或后面后,就出出现叠加在字符上面的雾霾效果。
在各种编码系统中,如何表示这个符号呢:
Encoding | |
---|---|
HTML Entity (decimal) | ҉ |
HTML Entity (hex) | ҉ |
How to type in Microsoft Windows | Alt +0489 |
UTF-8 (hex) | 0xD2 0x89 (d289) |
UTF-8 (binary) | 11010010:10001001 |
UTF-16 (hex) | 0x0489 (0489) |
UTF-16 (decimal) | 1161 |
UTF-32 (hex) | 0x00000489 (0489) |
UTF-32 (decimal) | 1161 |
C/C++/Java source code | “\u0489” |
Python source code | u”\u0489” |
为҉了҉便҉于҉缓҉解҉多҉年҉后҉人҉们҉对҉当҉下҉雾҉霾҉的҉思҉念҉,特҉别҉推҉出҉一҉款҉合҉成҉的҉雾҉霾҉专҉用҉纪҉念҉字҉体҉:雾҉霾҉体҉。҉
雾҉霾҉体҉下҉可҉以҉有҉雾҉霾҉宋҉体҉、҉雾҉霾҉黑҉体҉、҉雾҉霾҉文҉泉҉驿҉以҉及҉超҉级҉雾҉霾҉体҉等҉等҉字҉体҉…҉…҉
其҉字҉体҉的҉技҉术҉实҉现҉很҉简҉单҉,现҉有҉字҉加҉U҉n҉i҉c҉o҉d҉e҉字҉符҉:҉即҉可҉,如:
原҉来҉如҉此҉
就会显示成:
原҉来҉如҉此҉