您的位置:首页 > 其它

关于unicode和utf8,utf16等

2009-11-06 21:30 344 查看
经常有人谈起……我如何把gb或unicode字符串转化成utf8字符串?这类的问题
这里按照自己的理解简要说明一下

unicode是字符编码的一个标准,这个和GB2312或者BG5等是对应的,但是unicode又有些比较高级的特殊性,unicode的编码是固定的,但是表示这个编码的形式是多种多样的,比如一个字符的unicode编码是0xABCD,可以有各种形式来表示这个0xABCD,而通常所说的"unicode字符串"是指unicode编码的双字节表示法,比如编码0xABCD就会表示成0xABCD,编码0x31就表示成双字节的0x0031,而UTF-8,UTF-16是指其他形式的表示法,比如说UTF8,见下面的对应表:
* U-00000000 – U-0000007F: 0xxxxxxx
* U-00000080 – U-000007FF: 110xxxxx 10xxxxxx
* U-00000800 – U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
* U-00010000 – U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
* U-00200000 – U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
* U-04000000 – U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

就是说在0x00-0x7f段之间的unicode字符,表示成他的本身,比如0x31(字符1)用utf-8的形式存储成0x31,占用一个字节。
0x80-0x7ff段之间的字符(二进制大于等于8位小于等于11位之内的字符)用两个字节表示,这两个字节的第一个字节的前三位为标志位(110),第二个字节的前两位(10)为标志位,剩下还有11位来表示这个11位以下的UNICODE字符的编码
其他依此类推
这样的话,使用utf-8编码,可以使UNICODE编码的大多数为英文字符(<0x7f)的字符串占用的空间最少,但是使双字节的unicode字符(比如中文)表示来需要三个字节,比起纯粹的双字节表示的unicode字符串来说,各有利弊吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: