"桌".getBytes("UTF-8");为何是3个字符?他是如何算出来的。是高手的请进啊。
utf-8 编码后的字节-26 -95 -116 长度3
默认编码 -41 -64 长度2
请问 utf-8是如何把一个汉字分解成3个字符的请高手发言。。期待中。。
utf-8 编码后的字节-26 -95 -116 长度3
默认编码 -41 -64 长度2
请问 utf-8是如何把一个汉字分解成3个字符的请高手发言。。期待中。。
解决方案 »
- 如何设置JScrollPane的背景色??
- java怎样和sql连啊,代码怎么写啊?偶是新手,多多帮忙!
- 计算器例子 出错
- 一个基础的抽象类的疑问,盼解答..在线!
- 就这么点分了,全给大家,来这有分
- 哪里有 2003年度Javaworld编辑奖最佳Java书籍的下载,例如Patterns of Enterprise Application Architecture
- 为什么IE10不能调用flex的函数,而IE8可以呢?
- 圣诞快乐!散分!!
- 请问怎样把null转换成String类型,具体见内
- 都是面向对象,怎么C++和JAVA对此代码的结果不同?欢迎高手讨论!
- 关于java文件的问题
- 为什么jframe,jdialog.要放到window下面,而不放到jComponent下.
我们都知道任何东西在计算机内存的都是二进制。
简单的说,字符集的作用就是把这些二进制数据 对应为 我们所常常见到的符号、文字。
UTF-8是世界上所有语言的字符集。 UTF-8编码只有8位二进制,看来好像只能表示256个字符(2的8次方)。
但是如果3个8位二进制合在一起表示,那就很恐怖了。打个比方 第一个用值0到99的8位二进制表示
,第二个用值100到199的8位二进制表示,第三个用值200到256的8位二进制表示。那就可以表示56万个字符了!!
呵呵,以上是个比方,原理是一样的。 不过 UTF-8 表示字符时,有1个字节、2个字节、3个字节的。一般设计者
会把常用的设计为比较少字节的。
结合UTF8编码规则更好
多字节的如果占两个字节 格式是 110xxxxx 10xxxxxx
如果是三个字节格式是 1110xxxx 10xxxxxx 10xxxxxx
如果是四个字节格式是 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
看到规律了么? 如果一个完整的字是N个字节,那么首字节就有N个1加上0 , 后面的是数据区.
....
从第二个字节开始,前两个是10固定格式的,用于错误校验.后面的6位才是有用的.
举个例子 "桌"这个字 有三个字节来保存分别是 E6,A1,8C
11100110 10100001 10001100
我们来看,首字节3个1表示需要3个字节来保存这个"桌"字.
我们再来拆一拆1110_0110 10_100001 10_001100把每个字节的下划线部分去掉,再拼起来
0110 100001 001100
再连起来
0110100001001100
看看这个值是多少? 它就是"桌"这个字的unicode编码. 而这个编码是唯一的.
定义一个char=这个值 就是这个字了
具体的范围是: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最新的 Unicode 标准只定义到了 U+1FFFFF,也就是使用 4 个 UTF-8 来表示。比如:“桌”可以查找它的 Unicode 编码为 U+684CU+684C 拆成二进制序列为 根据上表,U+684C 位于 U+0800~U+FFFF 之中,因此采用三个字节进行编码,编码规则为:
1110xxxx 10xxxxxx 10xxxxxx其中的 x 采用 U+684C 的二进制序列填充1110xxxx 10xxxxxx 10xxxxxx
0110 100001 001101
--------------------------
11100110 10100001 10001101
E 6 A 1 8 C因此,U+684C 对应的 UTF-8 字节序列为 E6 A1 8C同理,通过 E6 A1 8C 可以转回成 Unicode 的 U+684C