在种种论坛上,常常会看到一些新鲜的字符,它们的内容会超越显现局限,
举个例子:
'Z͑ͫ̓ͪ̂ͫ̽͏̴̙̤̞͉͚̯̞̠͍A̴̵̜̰͔ͫ͗͢L̠ͨͧͩ͘G̴̻͈͍͔̹̑͗̎̅͛́Ǫ̵̹̻̝̳͂̌̌͘!͖̬̰̙̗̿̋ͥͥ̂ͣ̐́́͜͞'
罕见的另有一些有泰笔墨符构成的。这里就不举例子了。这些看似乱文的字符是怎样构成的呢?
实在它们并非乱文,尝试输出上面谁人例子的字符长度
'Z͑ͫ̓ͪ̂ͫ̽͏̴̙̤̞͉͚̯̞̠͍A̴̵̜̰͔ͫ͗͢L̠ͨͧͩ͘G̴̻͈͍͔̹̑͗̎̅͛́Ǫ̵̹̻̝̳͂̌̌͘!͖̬̰̙̗̿̋ͥͥ̂ͣ̐́́͜͞'.length; //75
发明居然包含了75个字符!我们用Array.from输出这些字符:
Array.from('Z͑ͫ̓ͪ̂ͫ̽͏̴̙̤̞͉͚̯̞̠͍A̴̵̜̰͔ͫ͗͢L̠ͨͧͩ͘G̴̻͈͍͔̹̑͗̎̅͛́Ǫ̵̹̻̝̳͂̌̌͘!͖̬̰̙̗̿̋ͥͥ̂ͣ̐́́͜͞');
//["Z", "͑", "ͫ", "̓", "ͪ", "̂", "ͫ", "̽", "͏", "̴", "̙", "̤", "̞", "͉", "͚", "̯", "̞", "̠", "͍", "A", "ͫ", "͗", "̴", "͢", "̵", "̜", "̰", "͔", "L", "ͨ", "ͧ", "ͩ", "͘", "̠", "G", "̑", "͗", "̎", "̅", "͛", "́", "̴", "̻", "͈", "͍", "͔", "̹", "O", "͂", "̌", "̌", "͘", "̨", "̵", "̹", "̻", "̝", "̳", "!", "̿", "̋", "ͥ", "ͥ", "̂", "ͣ", "̐", "́", "́", "͞", "͜", "͖", "̬", "̰", "̙", "̗"]
再检察个中某个字符的Unicode码点:
Array.from('Z͑ͫ̓ͪ̂ͫ̽͏̴̙̤̞͉͚̯̞̠͍A̴̵̜̰͔ͫ͗͢L̠ͨͧͩ͘G̴̻͈͍͔̹̑͗̎̅͛́Ǫ̵̹̻̝̳͂̌̌͘!͖̬̰̙̗̿̋ͥͥ̂ͣ̐́́͜͞')[10].codePointAt(0);//793,即16进制的0x0319
依据Unicode映射表查找出0x0319对应的字符,发明U+0300~U+036F称为连系附加标记,那末连系附加标记又是什么?
附加标记,是添加在字母上面的标记,以变动字母的发音或许以辨别拼写相似词语。比方汉语拼音字母“ü”上面的两个小点,或“á”、“à”字母上面的标调符。变音标记能够放在字母的上方或下方,也能够放在其他的位置。当多个附加标记叠加的时刻,就构成了看起来像乱码的标记。
而在泰文中,字符的构成也是由一些元音标记和音调标记构成的
所以多个元音标记或音调标记叠加时也会有相似的结果。这里就不再做论述。
在网页开辟中,特别是批评区,假如碰到太多的”插楼”字符,就会对其他用户形成浏览障碍,影响浏览体验,那怎样防止这类状况呢。这里供应两种要领。
第一种是对字符串笔墨地区设置最大高度,超越的部份自动隐藏。
p {
height: 20px;
overflow: hidden;
}
另一种体式格局就是对这类特别字符做过滤操纵。将附加字符举行过滤,这类要领在某种程度上会误杀一些须要平常显现的附加标记。但平常也不会影响团体功用,利大于弊。
var regexSymbolWithCombiningMarks = /([\0-\u02FF\u0370-\u1DBF\u1E00-\u20CF\u2100-\uD7FF\uDC00-\uFE1F\uFE30-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF])([\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]+)/g;
function getSymbolsIgnoringCombiningMarks(string) {
// 删除附加标记:
var stripped = string.replace(regexSymbolWithCombiningMarks, function($0, symbol, combiningMarks) {
return symbol;
});
return stripped;
}
getSymbolsIgnoringCombiningMarks('Z͑ͫ̓ͪ̂ͫ̽͏̴̙̤̞͉͚̯̞̠͍A̴̵̜̰͔ͫ͗͢L̠ͨͧͩ͘G̴̻͈͍͔̹̑͗̎̅͛́Ǫ̵̹̻̝̳͂̌̌͘!͖̬̰̙̗̿̋ͥͥ̂ͣ̐́́͜͞'); //"ZALGO!"
讲到这里,我们对Unicode已经有了比较仔细的相识。置信在开辟中碰到题目也能找出泉源地点了。
经由过程进修编码的汗青,道理以及查询映射表,我们知道了乱码是怎样发生的,而且应用ES6或正则表达式,来处理绝大多数编码题目。
参考文章:
https://zh.wikipedia.org/wiki
https://mathiasbynens.be/note…