"桌".getBytes("UTF-8");为何是3个字符?他是如何算出来的。是高手的请进啊。
utf-8 编码后的字节-26  -95  -116  长度3
      默认编码    -41  -64        长度2  
请问 utf-8是如何把一个汉字分解成3个字符的请高手发言。。期待中。。

解决方案 »

  1.   

    UTF-8 是一种编码转换格式,很多编码从一种变成别一样,都要首先变成UTF-8UTF-8,汉字变成字节,是三个,这个是约定的。
      

  2.   

    如果你要详细知道:请看:http://www.utf.com.cn/article/s41-3
      

  3.   

    字符集UTF-8,UTF-16,UNICODE的设计都是非常有意思的。
    我们都知道任何东西在计算机内存的都是二进制。
    简单的说,字符集的作用就是把这些二进制数据 对应为 我们所常常见到的符号、文字。
    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个字节的。一般设计者
    会把常用的设计为比较少字节的。
      

  4.   

    我刚写了个不借助工具实现的解析UTF8的例子,可以参考下.
    结合UTF8编码规则更好
      

  5.   

    utf-8是不定长的,占1-3个字节。
      

  6.   

    普通英文占一个字节 格式是 0xxxxxxx
    多字节的如果占两个字节 格式是 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=这个值 就是这个字了 
      

  7.   

    根据 UTF-8 的转换规则,一个 Unicode 字符转换 UTF-8 编码格式可以采用 1~6 个字节来表示,
    具体的范围是: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
      

  8.   

    更多关于编码的帖子可以看看:http://topic.csdn.net/u/20080623/16/e0f44f00-eaf9-4d38-b325-a3cc443f2ec9.htmlhttp://topic.csdn.net/u/20081009/09/e899898c-591f-4985-ae88-5972475708fb.html