編程語(yǔ)言的使用
utf-16可以算是2字節(jié)定長(zhǎng)編碼。
字符處理方便且速度快,算長(zhǎng)度啊,定位字符啊,正則匹配等唬滑。
所以許多編程語(yǔ)言的內(nèi)部編碼都是utf-16。
java剩盒、js甘萧、c#、python默認(rèn)的字符串內(nèi)部編碼都是utf-16财松。
然而那些unicode超出U+FFFF的字符需要4個(gè)字節(jié)表示瘪贱。
就出坑了,如js代碼
a = "我是??" // a.length == 4
b = a[2] // b是個(gè)亂碼辆毡,而不是'??'
優(yōu)點(diǎn)
- 2字節(jié)定長(zhǎng)編碼菜秦,處理速度快〔耙矗【有些字符要4個(gè)字節(jié)球昨,如"??"】
- 節(jié)省空間。非ascii字符多數(shù)可用2字節(jié)表示眨攘,utf-8下很多漢字要3個(gè)字節(jié)主慰。
缺點(diǎn)
- 不兼容ascii。
- 一些字符是4個(gè)字節(jié)鲫售,會(huì)出bug共螺,如"??"。
- 需要區(qū)分字節(jié)序情竹。文件保存一般有個(gè)bom頭:BE-'FEFF'藐不、LE-'FFFE'。
特殊的編碼
U+D800到U+DFFF是沒(méi)有定義unicode的,utf-16用這段來(lái)標(biāo)識(shí)4字節(jié)字符雏蛮。分高低位涎嚼,共20個(gè)有效bit位。
如果不支持非UCS-2的unicode挑秉,可以直接不認(rèn)這個(gè)范圍里的字符法梯。