国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

qujian / 1935人閱讀

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

在各種論壇上,經常會看到一些奇怪的字符,它們的內容會超出顯示范圍,

舉個例子:

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

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

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

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

發現竟然包含了75個字符!我們用Array.from輸出這些字符:

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

再查看其中某個字符的Unicode碼點:

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

根據Unicode映射表查找出0x0319對應的字符,發現U+0300~U+036F稱為結合附加符號,那么結合附加符號又是什么?

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

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

所以多個元音符號或聲調符號疊加時也會有類似的效果。這里就不再做闡述。

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

第一種是對字符串文字區域設置最大高度,超出的部分自動隱藏。

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

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

var regexSymbolWithCombiningMarks = /([