常用字符编码:ASCII字符编码和Unicode字符编码和UTF-8字符编码个人总结

1.ASCII字符编码

ASCII (American Standard Code for Information Interchange):美国信息交换标准代码是基于拉丁字母的一套电脑编码系统。

  • 出现原因:用7 位二进制数(机器语言)来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符 。总共有128个字符,用1个字节就可以保存所有ASCII码,且一个英文字符大小为1字节
  • 局限:只能显示英文字符
  • 0~31和127是控制字符或通信专用字符;(不在屏幕上显示的字符)
  • 32~126是字符(32是空格),其中48~57为0到9十个阿拉伯数字。(在屏幕上显示的字符)
  • ASCII编码表链接:ASCII码中文站

2.Unicode字符编码

Unicode(统一码)(缩写UCS)是一种在计算机上使用的字符编码。将每种语言中的每个字符设定了统一并且唯一的二进制编码。

  • 出现原因:在英语中,用128个符号编码便可以表示所有,但是用来表示其它国家语言,128个符号是不够的,所以为了能让计算机识别并表示世界上每个字符,所以创造出Unicode字符编码。
  • 优点:将世界上每个符号映射为对应唯一的Unicode编号,且兼容ASCII字符编码
  • 缺点:一个英文字母符号和一个中文符号都占用2字节空间大小(二进制数),在英文字母中,其只需1个字节就可以,使用2个字节就造成了存储空间的浪费。
  • 图示:请添加图片描述

3.UTF-8字符编码

**UTF是“UCS Transformation Format”的缩写,即Unicode字符集转换格式,
UTF-8 是 Unicode 的改进方式之一。

  • 出现原因:为解决Unicode字符编码中空间浪费问题;

  • 优点:继承了Unicode字符编码的优点,也能表示世界上每个符号,且不会乱码,并采用可变长的编码方式,使用1-4个字节来表示对应的二进制编码,其英文字母字符占1个字节,中文字符占3个字节,这样可以节省文本空间资源;

  • UTF-8字符编码规则

      1. 字符对应的Unicode编号(十六进制数表示)在图中找寻对应的Unicode编号(十六进制数表示)范围,然后得到对应的UTF-8 二进制格式;
      1. 剩下空缺x二进制位,从字节最后一个的二进制位开始,将该符号的 Unicode编号(二进制数表示)按照低位填字节中的低位并依次从低位往高位填入字节空缺部分,未填完的字节空缺部分补0;
      1. 得到对应字符的UTF-8码。
Unicode编号(十六进制数表示)范围UTF-8 二进制格式
0000 0000 - 0000 007F0xxxxxxx
0000 0080 - 0000 07FF110xxxxx 10xxxxxx
0000 0800 - 0000 FFFF1110xxxx 10xxxxxx 10xxxxxx
0001 0000 - 0010 FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

UTF-8 二进制格式的由来
1. 单字节UTF-8 二进制格式:

    1. 设最左位高位为0,后7位为对应的Unicode编号(二进制数表示);
    1. 得到对应字符的UTF-8格式。

由此可见,UTF-8字符编码也兼容ASCII字符编码 ,并大小为1字节,比Unicode字符编码节省1字节空间大小。

2. n字节(n>1)UTF-8 二进制格式:

    1. 第一个字节的前n位全都设为1,第n + 1位设为0;
    1. 剩余其它每个字节的前两位全都设为10;
    1. 剩余空缺填上x。
    1. 得到对应字符的UTF-8格式。

为什么可以在Java字符io流可以用char数据类型(2字节)变量存储电脑文本(utf-8编码)的汉字(3个字节)?
答案汉字在Unicode占2字节,在utf-8中占3字节(从上图可以看出来,第一个字节的1110和第二个字节的10,第三个字节的10,加起来一个字节用来定义了格式,其实汉字有效的数据大小还是2个字节),所以在char(2个字节)中其实存储的还是汉字有效的数据大小(2个字节)

如有错误或侵权,望您联系我进行修改,谢谢!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值