ASCII、Unicode、UTF-8

本文详细介绍了ASCII、Unicode和UTF-8三种字符编码系统。ASCII是广泛使用的单字节编码,主要针对英语和西欧语言。Unicode通过2字节编码解决多语言字符表示,但存在空间浪费问题。UTF-8是变长编码,兼容ASCII并有效解决了Unicode的空间浪费问题。
摘要由CSDN通过智能技术生成

ASCII、Unicode、UTF-8

ASCII

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统。

美国标准信息交换代码是由美国国家标准学会 (American National Standard Institute , ANSI) 制定的,标准的单字节字符编码方案,用于基于文本的数据。起始于 50 年代后期,在 1967 年定案。它最初是美国国家标准,供不同计算机在相互通信时用作共同遵守的西文字符编码标准,它已被国际标准化组织(International Organization for Standardization, ISO)定为国际标准,称为 ISO 646 标准。适用于所有拉丁文字字母。

ASCII 码采用指定 7 位或 8 位二进制组合来表示 128 或 256 种字符。

7 位 ASCII 码 8 位 ASCII 码
名称 基础 ASCII 码 基础 ASCII 码 + 扩展 ASCII 码(后 128 个)
范围 0x00 - 0x7F (0 - 127) 0x00 - 0xFF(0 - 255)
说明 理论上只用到 7 位,一个字节的最高位有特殊用途(不一定为 0) 前面 128 个兼容 7 位 ASCII,在 7 位基础上最高位补 0

标准 ASCII 码:标准 ASCII 码每个字符采用 8 bit(1 byte)传输,在 7 为 ASCII 码基础上,最高位用于奇偶校验。

奇校验:代码一个字节中 1 的个数必须是奇数个。以 7 位 ASCII 码的奇校验为例,如果 7 位中有奇数个 1,最高位补 0;如果 7 位中有偶数个 1,最高位补 1

偶校验:代码一个字节中 1 的个数必须是偶数个。以 7 位 ASCII 码的奇校验为例,如果 7 位中有奇数个 1,最高位补 1;如果 7 位中有偶数个 1,最高位补 0

后来扩展 ASCII 码不再作为国标(国际标准)。

一般我们所说的 ASCII 码是 8 位 ASCII 前 128 个(高位补 0)。

Unicode

ASCII 码只能表示少量的字符(8 bit 最多 256 个)。

其它语言显然无法用一个字节来存储(常用中文都超过 3000 了)。

为了统一全球所有语言的所有字符,显然需要提出一种新的标准。

通用字符集(Universal Character Set, UCS),有两种标准字符集 UCS-2 、UCS-4。分别表示 2 个字节定长字符编码和 4 个字节定长字符编码。

Unicode 编码采用 2 字节(16 bit)表示一个字符,对于以前的 ASCII 码则高字节全部补 0 进行处理。

最多能支持 65536 个字符。

弊端

  • Unicode 编码与 ASCII 码完全不兼容。对于以前的 ASCII 码文件,无法区分是 ASCII 码字符还是 Unicode 字符。
  • 可支持的字符依然较少,虽然比起 ASCII 码最多 256 个,最多 65536 个字符已经属于很多了。但依然无法囊括全球所有国家的字符。(中国汉字就超过 30000 ,虽然常用的不多,但是总有人取生僻字,你说这个该不该显示呢?)
  • 采用 4 字符定长编码,可以囊括更多国家的字符。但是随着而来的会造成不必要的空间浪费。(一个纯 ASCII 码英文文档,采用 UCS-4 后体积增大 3 倍,显然这种做法很不可取)。

UTF-8

由于不兼容 ASCII 码,可支持字符不足,存在较大的空间浪费。使得 Unicode 编码的推广受到严重的限制。

为了解决以上问题,推出了 UTF-8 变长字符编码标准,可以使用 1 ~ 6 个字节表示一个字符。

根据编码的头部来区分属于什么编码,兼容了 ASCII 码, Unicode 编码。

与 Unicode 编码的对应关系为:

bit 数 Unicode / UCS-4 UTF-8 二进制 byte 数
0 - 7 0000 0000 - 0000 007F 0xxxxxxx 1
8 - 11 0000 0080 - 0000 07FF 110xxxxx 10xxxxxx 2
12 - 16 0000 0800 - 0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx 3
17 - 21 0001 0000 - 0010 FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 4
22 - 26 0020 0000 - 03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 5
27 - 31 0400 0000 - 7FFF FFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 6

按照上标可以兼容 Unicode 编码。

而 1 字节 UTF-8 的编码规则可以兼容 ASCII 码。

附录 I :ASCII 码字符列表

Bin(二进制) Oct(八进制) Dec(十进制) Hex(十六进制) 缩写 / 字符 解释
0000 0000 00 0 0x00 NUL(null) 空字符
0000 0001 01 1 0x01 SOH(start of headline) 标题开始
0000 0010 02 2 0x02 STX (start of text) 正文开始
0000 0011 03 3 0x03 ETX (end of text) 正文结束
0000 0100 04 4 0x04 EOT (end of transmission) 传输结束
0000 0101 05 5 0x05 ENQ (enquiry) 请求
0000 0110 06 6 0x06 ACK (acknowledge) 收到通知
0000 0111 07 7 0x07 BEL (bell) 响铃
0000 1000 010 8 0x08 BS (backspace) 退格
0000 1001 011 9 0x09 HT (horizontal tab) 水平制表符
0000 1010 012 10 0x0A LF (NL line feed, new line) 换行键
0000 1011 013 11 0x0B VT (vertical tab) 垂直制表符
0000 1100 014 12 0x0C FF (NP form feed, new page) 换页键
0000 1101 015 13 0x0D CR (carriage return) 回车键
0000 1110 016 14 0x0E SO (shift out) 不用切换
0000 1111 017 15 0x0F SI (shift in) 启用切换
0001 0000 020 1
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值