乐趣区

unicode和utf8编码

最开始是只有一个字节的 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 中占用的字节数的

退出移动版