Python 入门 26 —— ASCII 编码、Unicode 编码、 UTF-32、 UTF-16、 UTF-8、 GB2312 编码、 GBK 编码

本文介绍了ASCII、Unicode、UTF-32、UTF-16、UTF-8、GB2312和GBK编码的概念和原理。ASCII编码只能表示128个字符,Unicode编码则为全球字符分配唯一编码。UTF-8、UTF-16和UTF-32是Unicode的存储规则,其中UTF-8与ASCII兼容,且节省空间。GBK编码是在GB2312基础上扩展的,用于容纳更多汉字。Python在读取文件时遵循UTF-8规则。
摘要由CSDN通过智能技术生成

计算机存储和处理信息都是以一个8位的二进制字节为单位的,例如:0b 1111 0000。一个字母、汉字等如何用一个二进制的数(编码)来表示呢。在计算机发展初期,因为没有人能预料到计算机会有现在这么大的发展,也没有想到要处理全世界的字符,所以,在发展之初仅设计了一个简单的、能表示128个字符的编码方案————ASCII编码 。

一、ASCII 编码

ASCII 编码方案规定,在一个8位的二进制字节中,第1位(最高位)固定为0,然后其它7位不断变化,以表示26个大写、26小写的英文字母、10个数字和其它的常用符号。例如:

A ———— 0b 0100 0001、或:0x 41、或:65
B ———— 0b 0100 0010、或:0x 42、或:66
C ———— 0b 0100 0011、或:0x 43、或:67
a ———— 0110 0001、或:0x61、或:97
b ———— 0110 0010、或:0x62、或:98
c ———— 0110 0011、或:0x63、或:99
1 ———— 0011 0001、或:0x31、或:49
2 ———— 0011 0010、或:0x32、或:50
3 ———— 0011 0011、或:0x33、或:51
小于号 < ———— 0011 1100、或:0x3C、或:60
等号 = ———— 0011 1101、或:0x3D、或:61
大于 > ———— 0011 11100、或:x3E、或:62
回车键 ———— 0000 1101、或:0x0D、或:13
响铃 ———— 0000 0111、或:0x07、或:7

ASCII编码中,第1位固定为0,只有剩余7位可以进行各种变化,所以,最多可表示128个字符。

为了本文后面叙述的方面,我个人在这篇文章中,暂且将ASCII编码中这128个字符称作:原符。也就是说,我在本篇下文中所称的原符,就是指ASCII编码中这128个字符。

二、Unicode 编码

随着计算机技术的发展,原符显然远远不够。于是就有了国际上统一的 Unicode 编码,它为全世界所有字符都分配了一个唯一的编码。当然,现在我们看到的 Unicode 编码也是从简到繁不断完善形成的。

Unicode 编码规定,用一个21位的二进制数表示一个字符。即:

第1个:0b 0 0000 0000 0000 0000 0000、或:0x 00 0000
第2个:0b 0 0000 0000 0000 0000 0001、或:0x 00 0001
......
倒 二:0b 1 0000 1111 1111 1111 1110、或:0x 10 fffe
最 后:0b 1 0000 1111 1111 1111 1111、或:0x 10 ffff

实际上,Unicode 编码是将所有字符分成17个种类(17个面)进行分类编码:

0x 00 0000 ———— 00 ffff:第1面,基本多文种平面(BMP):原符、各国文字等
0x 01 0000 ———— 01 ffff:第2面,多文种补充平面
0x 02 0000 ———— 02 ffff:第3面,表意文字补充平面
0x 03 0000 ———— 03 ffff:第4面,表意文字第三平面
0x 04 0000 ———— 04 ffff:第5面,未使用
......
0x 0d 0000 ———— 0d ffff:第14面,未使用
0x 0e 0000 ———— 0e ffff:第15面,特别用途补充平面
0x 0f 0000 ———— 0f ffff:第16面,专用区-A
0x 10 0000 ———— 10 ffff:第17面,专用区-B

其中 0x 00 4E00 ---- 00 9FFF 是中、日、韩的三种文字,例如:

一 ———— 0x 00 4e00 
习 ———— 0x 00 4e60
乡 ———— 0x 00 4e61
笑 ———— 0x 00 7b11
大 ———— 0x 00 5927
好 ———— 0x 00 597d

从理论计算,0x 00 0000 ———— 10 ffff,可以有1,114,112种编码,但世界所有的字符显然比这少的多,所以,有许多的编码是空的,没有被使用。

Unicode 编码是一个字符的编码方案,它确保了世界上的每一个符号都有一个唯一的编码。Unicode 编码一般用“U + 16进制编码值”的形式表示。例如:

A ———— U+41
B ———— U+42
C ———— U+43
一 ———— U+4e00
习 ———— U+4e60
乡 ———— U+4e61

一个Unicode 编码是一个21位的二进制数,从表面上看,在计算机中用3个字节来存储一个Unicode编码正合适,但计算通常不用3个字节作为一个单位,所以,用4个字节来存储一个Unicode 编码应该是最好的。编码问题本该到此结束,但实际上并非如此。

尽管Unicode 编码设计了17个面,所实际上仅第一个面被充分利用,其它面很多是空的。也就是说,绝大部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值