编码原理 先看这个模板: UCS-4 range (hex.) UTF-8 octet sequence (binary) 0000 0000-0000 007F 0xxxxxxx 0000 0080-0000 07FF 110xxxxx 10xxxxxx 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx 0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 0400 0000-7FFF FFFF 1111110x 10xxxxxx ... 10xxxxxx 编码步骤: 1) 首先确定需要多少个8bits(octets) 2) 按照上述模板填充每个octets的高位bits 3) 把字符的bits填充至x中,字符顺序:低位→高位,UTF8顺序:最后一个octet的最末位x→第一个octet最高位x 4) 解码的原理一样。 实例:(留意每个bit的颜色,粗体字为模板内容) UCS-4 UTF-8 HEX BIN Bytes BIN HEX Bytes 0000 000A 00001010 4 00001010 0A 1 0000 0099 10011001 4 11000010 10011001 C2 99 2 0000 8D99 10001101 10011001 4 11101000 10110110 10011001 E8 B6 99 3 不知大家看懂了没有,其实不懂也无所谓,反正又不用自己算,程式可以完全代劳。 以UTF8格式储存的文件档首标识为EF BB BF。 效率 从上述编码原理中得出的结论是: 1.每个英文字母、数字所占的空间为1 Byte; 2.泛欧语系、斯拉夫语字母占2 Bytes; 3.汉字占3 Bytes。 UTF8的好处: 数据表现:网页可以显示任何语言和文字,只要你的操作系统支持unicode,还有相应的字体,Linux下系统编码为utf8的话,可以 解决很多无谓的中文问题,比如mp3播放器或者gtk2. 数据交换:无需那些gb2312和big5之间的转换程序了. php里著名的"許功蓋"问题,smarty的问题,都可以很好的解决,这方面的以后扩展来介绍: UTF8的坏处: 用的中文网站还不多,不利于数据交流.
|