亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

細(xì)說Unicode(三) Unicode 番外之附加字符

qujian / 1996人閱讀

摘要:在各種論壇上,經(jīng)常會(huì)看到一些奇怪的字符,它們的內(nèi)容會(huì)超出顯示范圍,舉個(gè)例子常見的還有一些有泰文字符組成的。第一種是對字符串文字區(qū)域設(shè)置最大高度,超出的部分自動(dòng)隱藏。將附加字符進(jìn)行過濾,這種方法在某種程度上會(huì)誤殺一些需要正常顯示的附加符號。

在各種論壇上,經(jīng)常會(huì)看到一些奇怪的字符,它們的內(nèi)容會(huì)超出顯示范圍,

舉個(gè)例子:

"Z??????????????????A????????L?????G????????????O??????????!????????????????"

常見的還有一些有泰文字符組成的。這里就不舉例子了。這些看似亂文的字符是怎么形成的呢?

其實(shí)它們并不是亂文,嘗試輸出上面那個(gè)例子的字符長度

"Z??????????????????A????????L?????G????????????O??????????!????????????????".length; //75

發(fā)現(xiàn)竟然包含了75個(gè)字符!我們用Array.from輸出這些字符:

Array.from("Z??????????????????A????????L?????G????????????O??????????!????????????????");
//["Z", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "A", "?", "?", "?", "?", "?", "?", "?", "?", "L", "?", "?", "?", "?", "?", "G", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "O", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "!", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?"]

再查看其中某個(gè)字符的Unicode碼點(diǎn):

Array.from("Z??????????????????A????????L?????G????????????O??????????!????????????????")[10].codePointAt(0);//793,即16進(jìn)制的0x0319

根據(jù)Unicode映射表查找出0x0319對應(yīng)的字符,發(fā)現(xiàn)U+0300~U+036F稱為結(jié)合附加符號,那么結(jié)合附加符號又是什么?

附加符號,是添加在字母上面的符號,以更改字母的發(fā)音或者以區(qū)分拼寫相似詞語。例如漢語拼音字母“ü”上面的兩個(gè)小點(diǎn),或“á”、“à”字母上面的標(biāo)調(diào)符。變音符號可以放在字母的上方或下方,也可以放在其他的位置。當(dāng)多個(gè)附加符號疊加的時(shí)候,就形成了看起來像亂碼的符號。

而在泰文中,字符的組成也是由一些元音符號和聲調(diào)符號組成的

所以多個(gè)元音符號或聲調(diào)符號疊加時(shí)也會(huì)有類似的效果。這里就不再做闡述。

在網(wǎng)頁開發(fā)中,特別是評論區(qū),如果遇到太多的"插樓"字符,就會(huì)對其他用戶造成閱讀障礙,影響閱讀體驗(yàn),那怎么避免這種情況呢。這里提供兩種方法。

第一種是對字符串文字區(qū)域設(shè)置最大高度,超出的部分自動(dòng)隱藏。

p {
    height: 20px;
    overflow: hidden;
}

另一種方式就是對這種特殊字符做過濾操作。將附加字符進(jìn)行過濾,這種方法在某種程度上會(huì)誤殺一些需要正常顯示的附加符號。但一般也不會(huì)影響整體功能,利大于弊。

var regexSymbolWithCombiningMarks = /([