Unicode与UTF-8学习

 看了张孝祥老师在blog提到的问题(可能也不是他原创的)。汗了一下因为我不会。是一个关于UTF-8编码的问题。
public class TestUTF8
{
   
public static void main(String [] args) throws
 Exception
  
{
       
byte[] bytes = {(byte)0xC0,(byte)0xB1}
;
       String str 
= new String(bytes,"UTF-8"
);
       System.out.println(str.getBytes(
"UTF-8"
).length); 
   }

}

输出结果是:1。

查找了相关资料,看了很多大哥的见解。剽窃他人加上自己的一些理解如下:

将byte数组以UTF-8编码方式转化成String(重点),然后对该String以getByte("UTF-8")以"UTF-8"格式读出String的位数。

其中的关键点在于:将byte数组以UTF-8编码方式转化成String

0xc0,0xb1---------------〉1100 0000、1011 0001

以为1100 0000+1011 0001一共是16位2BTYE。

按照UTF-8的转化规则

1字节 0xxxxxxx
2字节 110xxxxx 10xxxxxx
3字节 1110xxxx 10xxxxxx 10xxxxxx
4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
如果转化的是一个字节长度 以首位为0 剩下的七位x与原一样。

如果转化的是两个字节长度,去掉原来的第一个byte的前三位,和第二个Byte的前

两位。

例中:1100 0000+1011 0001转化后:0  0000+ 11  0001

但是这并非标准的UTF-8编码。前面的所有的0去掉后成为:11  0001。成了一个byte了。

另外Unicode与UTF-8还是有区别的:

在内存中,识别的是Unicode.而UTF-8是Unicode Text Format多用于文件等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值