经常有人谈起……我如何把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字符串来说,各有利弊吧