UTF-16是
Unicode字符编码五
层次模型的第三层:字符编码表(Character Encoding Form,也称为 storage format)的一种实现方式。即把Unicode
字符集的抽象码位映射为16位长的整数(即
码元)的序列,用于
数据存储或传递。Unicode字符的码位,需要1个或者2个16位长的码元来表示,因此这是一个变长表示。
UTF-16是
Unicode的其中一个使用方式。
UTF是Unicode Transfer Format的缩写,即把Unicode转做某种格式的意思。
在Unicode
基本多文种平面定义的字符(无论是
拉丁字母、汉字或其他文字或符号),一律使用2字节储存。而在辅助平面定义的字符,会以代理对(
surrogate pair)的形式,以两个2字节的值来储存。
UTF-16比起
UTF-8,好处在于大部分字符都以固定长度的字节(2字节)储存,但UTF-16却无法兼容于
ASCII编码。
UTF-16的大尾序和小尾序储存形式都在用。一般来说,以
Macintosh制作或储存的文字使用大尾序格式,以Microsoft或
Linux制作或储存的文字使用小尾序格式。
为了弄清楚
UTF-16文件的大小尾序,在UTF-16文件的开首,都会放置一个U+FEFF字符作为Byte Order Mark(UTF-16LE以FF FE代表,UTF-16BE以FE FF代表),以显示这个文字档案是以UTF-16编码,其中U+FEFF字符在UNICODE中代表的意义是ZERO WIDTH NO-BREAK SPACE,顾名思义,它是个没有宽度也没有断字的空白。
UTF-16可看成是UCS-2的父集。在没有辅助平面字符(Surrogate Code Points)前,UTF-16与UCS-2所指的是同一的意思。但当引入辅助平面字符后,就称为UTF-16了。现在若有软件声称自己支持UCS-2编码,那其实是暗指它不能支持在UTF-16中超过2字节的
字集。对于小于0x10000的UCS码,UTF-16编码就等于UCS码。