unicode和utf-8编码

最开始是只有一个字节的ascii编码包括0-127,也就是英文字符,比如abcdef还有!@#*&^等等
然后又有了其它语言的编码,例如专门为中文设计的gbk编码...
这些编码是不兼容,为了兼容所有的编码,统一制定了unicode字符集
unicode只是一个字符集,它为全世界每一个字符分配一个数字,而这些数字在传输过程中,需要进行编码,解码,这里编码,解码的工具就是utf-8,除了utf-8,还有utf-16,utf-32

utf-8:多字节编码的字符,一个字符可以通过1-6个字节来编码,这样做的最大的优点就是节约内存,例如0x01只需要按照ascii那样使用一个字节来存储,而一个汉子则用两个字节
utf-16:每个字符使用两个字节来编码,java的字符串就是utf-16
utf-32:每个字符使用4个字节来编码

unicode字符集和unicode编码的转换方式如下

unicode                        utf-8
00000000-0000007f              0xxxxxxx
00000080-000007ff              110xxxxx 10xxxxxx
00000800-0000ffff              1110xxxx 10xxxxxx 10xxxxxx
00010000-001fffff              11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
00200000-03ffffff              111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
04000000-7fffffff              1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

在上面的表中,utf-8下面的x就是用来填充字符的01比特的,而每个字节前面的0,10,110...等等是用来确定这个字符在utf-8中占用的字节数的