- Unicode
Unicode就是统一码,目的在于推广一个世界性的通行编码,能表示世界上大部分的语言文字 。
每个Unicode在用2个byte来表示,相当于216=65536种不同的组合。
Unicode是与ISO10646的UCS(Universal Character Set)保持一致的,它们使用相同的字库和字码。
由于康熙字典就有四万七汉字,为了用尽量少的字码表示尽量多的利用汉字,Unicode(和UCS)采用了“中日韩文整合”(CJK Unification),就是把相似的字用一个单码来表示,这样的汉字,统称为Unihan。在Unicode2.1和3.0标准中,有两万多统汉字。
- UTF-8/UTF-16
UTF是Unicode/UCS Transformation Format, 8和6指的是bit:
UTF-16: 就是Unicode的双byte编码的实现,再加上一个应付未来扩展需要的编码机制。
UTF-8: 不等幅编码方式,用一个、两个或三个byte来表示一个字。(English只需要1个byte)
- XML中对Unicode的要求
XML1.0要求,XML parser至少必须支持以UTF-8/UTF-16编码的Unicode字符串,默认为Unicode编码。
- Unicode中的空间分配
Unicode的前256个字符和ISO8859-1一样,其中,从0000-00FF,就是ASCII码。
而Unihan,是从3400-9FFF之间,F9000-FAFF之间也有,其中,BIG5和GB2312是从4E00-9FFF之间。
- UTF-8的编码原理和特性
UTF有三种编码方式:
一个byte: 以0开头,单byte,0000-007F,ASCII码(0x00-0x7F)不需要转换
两个byte: 以110开头,第二个byte以10开头,0080-07FF
三个byte:以1110开头,后面两个byte都以10开头,0800-FFFF
由于每个byte之间分割清楚,所以可以轻松地对UTF-8编码作处理,并和Unicode之间作转换。
- UTF的优点
由于Unicode都是双byte的,所以前256个字符都是以0x00开头的,而0x00在系统中一般有特别的含义,而且,双byte很难断字,需要从文件开头读起,如果某一个byte出错,从这个byte之后所有的字符都出错了。
而UTF就很容易断字,并且对于出错时的处理也有特别的规定。
- UTF的缺点
很显然,UTF-8会使得大多数文字byte数目会膨胀,需要更多的byte来表示文字,Unihan会膨胀1.5倍。
而UTF-16会使得西文byte加倍。