【编码】ASCII、Unicode、UTF-8

字节流和字符流

1、字节是给计算机看的,字符是给人看的。
2、字节流读取单个字节,用来处理二进制文件(图片、MP3、视频文件)。
3、字符流读取单个字符,字符流用来处理文本文件(二进制文件编码后人可以阅读)。

ASCII 码

1、前言

  • 计算机中,所有的数据在存储和运算时都要使用二进制数表示。要把人类使用的字符转换为计算机所能理解的二进制数,用哪些二进制数表示哪个符号,就是编码
  • 每一个二进制位(bit)有0和1两种状态。
  • 八个二进制位为一个字节(byte),可以表示256种不同的状态,每个状态对应一个符号,从00000000到11111111。

2、ASCII码对照表

  • ASCII (American Standard Code for Information Interchange,美国信息交换标准代码):是使用标准的单字节字符编码方案的一套电脑编码系统。
  • 主要用于显示现代英语和部分西欧语言。对英语字符与二进制位之间的关系,做了统一规定。
  • ASCII 码一共规定了128个字符的编码,只占用了一个字节的后7位,最前面的一位用作奇偶校验:检验数据传输是否出现了错误。
  • 33个控制字符编号范围:0 ~ 31 和 127(0x00 ~ 0x1F 和 0x7F)。
  • 95个可显示字符编号范围:32 ~ 126(0x20~0x7E)。
  • 10个个阿拉伯数字:48~57(字符 0 的ASCII码为48)。
  • 26个大写英文字母:65~90(字符 A 的ASCII码为65)。
  • 26个小写英文字母:97~122(字符 a 的ASCII码为97)。

3、奇偶校验码

  • 奇偶校验码用来检测数据传输过程中是否发生错误,是众多校验码中最为简单的一种。
  • 奇校验:原始码流+校验位 总共有奇数个1。
  • 偶校验:原始码流+校验位 总共有偶数个1。
  • 只能检测出部分场景,且没有办法确定哪一位出错,不能进行错误校正。

4、ASCII码缺点

  • ASCII的局限在于只能显示26个基本拉丁字母、阿拉伯数字和英式标点符号,因此只能用于显示现代美国英语。
  • 现在的软件系统大多采用Unicode,特别是与ASCII向下兼容的UTF-8。

Unicode

1、GB2312、 GBK、GB18030 编码

  • GB2312 是对 ASCII 的中文扩展:采用两个字节对字符集进行编码,并向下兼容ASCII编码方式。0~127的为”半角”字符,>127的为”全角”字符。共包括了7000多个简体汉字、数学符号、罗马希腊字母、ASCII码等。
  • GBK 标准在GB2312 的内容上扩充了繁体字(近20000个)、日韩汉字和符号等,只要第一个字节是大于127就固定表示这是一个汉字的开始。
  • GB18030在GBK的基础上扩展了少数民族的文字。
  • GB2312、GBK、GB18030 编码统称为DBCS(Double Byte Charecter Set, 双字节字符集):汉字对照表
  • 缺点:各个国家和地区有不同的字符编码规则,无法通用。

2、Unicode

  • ISO(International Organization for Standardization,国际标准化组织)统一了全球几乎所有符号的编码,称为Unicode(Universal Multiple-Octet Coded Character Set,UCS)
  • Unicode为字符集中的每一个字符指定了统一且唯一的二进制编码。
  • 只要电脑上有Unicode编码系统,所有Unicode文件都可以正常解释。

3、Unicode编码缺点

  • Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储,使用多少字节表示:一个简单字符可以用1字节也可以用4字节表示。
  • 计算机无法区别Unicode 和 ASCII:三个字节表示一个符号,还是三个符号。出现了多种二进制格式存储方式来表示 Unicode。
  • 英文字母只用一个字节表示就够了,如果Unicode统一规定每个符号用三个或四个字节表示,存储存在极大浪费。
  • Unicode 在很长一段时间内无法推广,直到互联网的出现。

UTF-8

1、说明

  • UTF-8(8-bit Unicode Transformation Format)是Unicode 的实现方式之一。
  • UTF-8 是以8位为一个编码单位的变长的编码方式。使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
  • UTF-8 是互联网上使用最广的 Unicode 实现方式。其他还有UTF-16(以16位二进制数为基本单位对Unicode字符集中的字符编码)和 UTF-32。
  • 通过给每个Unicode码进行标记,使计算机可以区分读取几个字节的编码。
  • UTF-8 完全兼容ASCII编码,对于单字节的英语文本,UTF-8 和ASCII 完全相同。

2、UTF-8 编码规则

  • 单字节的字符,字节的第一位设为0,后面7位为这个符号的 Unicode 码。
  • n个字节的字符(n>1),第一个字节的前n位设为1,第n+1位设为0,后面字节的前两位都设为10,这n个字节的其余空位填充该字符Unicode码,高位用0补足。

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

UTF-8理解:如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。

举例:「知」字的Unicode 是 U+77E5,在左侧Unicode第三行的表示范围内,需要三个字节,格式是 1110xxxx 10xxxxxx 10xxxxxx。 从最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。得到UTF-8编码为E79FA5。
在这里插入图片描述
3、一句话总结

  • UTF-8是对unicode编码的一种实现方式,是以 8 位为一个编码单位的可变长编码。

4、UTF-8缺点

  • UTF-8 编码体积比较大,如果面向的使用人群绝大部分都是中国人,用 GBK 等编码也可以。

5、Unicode 与 UTF-8 转换

  • Windows平台记事本打开文件后,点击另存为,可以选择编码方式。

1)ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码,繁体中文会采用 Big5 码。

2)Unicode编码指的是notepad.exe使用的 UCS-2 编码方式,即直接用两个字节存入字符的 Unicode 码。

3)UTF-8编码。


其他

参考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值