utf-16
2017-02-07 本文已影响0人
小小青蛙不怕风吹雨打
编程语言的使用
utf-16可以算是2字节定长编码。
字符处理方便且速度快,算长度啊,定位字符啊,正则匹配等。
所以许多编程语言的内部编码都是utf-16。
java、js、c#、python默认的字符串内部编码都是utf-16。
然而那些unicode超出U+FFFF的字符需要4个字节表示。
就出坑了,如js代码
a = "我是𪚥" // a.length == 4
b = a[2] // b是个乱码,而不是'𪚥'
优点
- 2字节定长编码,处理速度快。【有些字符要4个字节,如"𪚥"】
- 节省空间。非ascii字符多数可用2字节表示,utf-8下很多汉字要3个字节。
缺点
- 不兼容ascii。
- 一些字符是4个字节,会出bug,如"𪚥"。
- 需要区分字节序。文件保存一般有个bom头:BE-'FEFF'、LE-'FFFE'。
特殊的编码
U+D800到U+DFFF是没有定义unicode的,utf-16用这段来标识4字节字符。分高低位,共20个有效bit位。
如果不支持非UCS-2的unicode,可以直接不认这个范围里的字符。