通俗易懂说-字符编码(ASCII,GB2312,GBK,Unicode,UTF-8/16/32)

1. 什么是字符?字符集?

字符: 各种文字和符号的总称,包括各国家文字,符号,数字等。
字符集: 为了表示计算机能够处理字符信息而选取的字符的集合。
字符编码: 建立一种转换规则或者说映射关系,将字符转换成计算机中可以表示的二进制比特序列。

2. 为什么需要字符编码?

所有字符在计算机内都是通过0和1二进制表示的,那么如何按照一定规则表示就是字符编码。

3. 什么是大小字节序?

3.1 为什么有字节序?

因为在计算机系统中,存储对象是以字节为单位的,每个地址单元都对应着一个字节。
对于单字节如char类型而言,存放和传输方式都是一样的。但是对于多字节如int类型,占用两个字节,那么其存储和传输按照什么顺序进行呢?大小字节序应运而生。

3.2 大小字节序

**小端字节序(little endian ):**低字节存储在低地址,记忆:高地址高字节

操作系统处理一般是小端字节序

**大端字节序(big endian):**低字节存储在高地址

网络传输一般是是大端

举例:
假设十六进制1234存储在地址为0x0000,和0x0001 上面,那么其大小端存储如下

	 0x0001 	0x0000
大端:  34 		  12
小端:  12		  34

4. 什么是ASCII?

ASCII: 美国信息交换标准代码
ASCII是最早最通用的单字节编码系统,用一个字节来表示英文字符和部分符号
0x0xxxxxxx ,最高位为0,用7比特表示字符,总共可以表示127个字符。
如: A的ascii是65 ,Z的ascii是90 ,a的ascii是97,z的ascii是122,0的ascii是48,9的ascii是57

5. 什么是GB2312?GBK?

原因: 问题来了,ASCII由于只能表示127种字符,但是世界上这么多国家这么多语言,不够怎么办? 这就出现了中国的GB2312和扩展字符编码GBK。
GB2312:

GB2312:是中国在1981年实施的一套汉字处理编码方式,用两字节来表示中文字符
GB2312的缺点: 局限性,只能表示65536个字符

GBK:

	GBK:向下兼容了GB2312 和 ASCII,它是GB2312的升级版,还收录了汉字首字符号,竖排标点符号等

6. 什么是Unicode?

Unicode跟中国做的GBK类似,但是格局更大,收录了世界所有的文字和符号
Unicode通常采用2个字节表示一个字符,与ASCII兼容,所有的原英文编码从单字节变成双字节编码,高字节全部置0。
缺点: Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。其中,UTF-8/16/32 都是 Unicode的一种实现方式。

7. 什么是UTF-8/16/32?

UTF-8:

互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是互联网上使用最广额一种Unicode的实现方式。
UTF-8 与 Unicode的关系: UTF-8是Unicode的实现方式之一。
编码方式: 采用一种变长的编码方式,它可以使用1~4字节表示一个符号,根据不同符号而变化字节长度。

UTF-16: 字符用两个字节或四个字节表示
UTF-32: 字符用四个字节表示

8. 参考

http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

猜你喜欢

转载自blog.csdn.net/lqy971966/article/details/89284662