ascii码,gbk编码,unicodo码,utf-8码

本文简略讲解这几个编码的关系,

1、ASCII (American Standard Code for Information Interchange):美国信息交换标准代码,

主要应用于英文的编码,每个英文占用一个字节,存储到文件中。

2、gbk,兼容英文编码的情况下,可用于中文编码,其中,英文单词占用一个字节,中文字占用两个字节,存储到文件中。

3、unicode码,也叫万国码、单一码,由于各个国家的文字不同,它为每种语言中的每个字符设定了统一并且唯一的值。长度很长,例如英文字母“A”的unicode码值为65,中文“智”的unicode码值为26234,如果用同样长度的字节保存,那么对于英文字母来说就是浪费了空间,所以此时出现了utf-8,针对Unicode的一种可变长度字符编码。

4、utf-8,可变长度字符编码。对于英文来说,只需要使用一个字节代表,对于中文来说,需要三字自己代码,那么我们怎么知道utf-8编码格式下的字节是一个一组还是三个一组?这就需要用到utf-8的定义方式。

UTF-8,采用1-4个字符进行传输和存储数据。

    编码规则:使用下面的模板进行转换

Unicode符号范围(十六进制)      |     UTF-8编码方式(二进制)
------------------------------------------------------------------------
0000 0000-0000 007F            |     0xxxxxxx
0000 0080-0000 07FF            |     110xxxxx 10xxxxxx
0000 0800-0000 FFFF            |     1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF            |     11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

如上图:

如果是英文,那么他占用一个字节,字节的二进制起始位为0,一个字节

如果是中文,那么它占用三个字节,字节的二进制起始位为1110,三个字节

下面举例说明utf-8怎么表示中文的,

char aChar = '智';
System.out.println(aChar);
int index = (int)aChar;
System.out.println("unicode十进制:"+index);
String hexString = HexUtil.toHex(index);
System.out.println("unicode十六进制:"+hexString);

通过以上代码,我们知道中文“智”的unicode码是26234,那么他的通过utf-8三个字节表示,是什么呢?使用如下代码

for (int i = 0; i < bytes.length; i++) {
   System.out.println(bytes[i]);
   System.out.println(getBinaryString(bytes[i]));
   System.out.println("-----------------");
}

得到这三个字节的值为 -26,-103,-70,

他们的补码分别是11100110,10011001,10111010

对应上述              1110xxxx 10xxxxxx 10xxxxxx 10xxxxxx

也就是utf-8代表的xxxx中的值为0110 011001 111010,使用二进制,转换,正好是26234

所以,utf-8的编码格式是这样得到的, 通过规定的byte数组得到二进制数,对比unicode码表,得到中文名称。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值