编码的发展历史
ASCII:
ASCII编码使用7位二进制数表示一个字符,范围从0到127。每个字符都有一个唯一的ASCII码值与之对应。例如,大写字母"A"的ASCII码是65,小写字母"a"的ASCII码是97。
ASCII字符集包括英文字母,数字,标点符号,控制字符(回车,换行等等),128个,最初来源于美国。
ASCII扩充表:
解决欧洲一些国家字符编码问题,扩充为256个字符。
但是在中国无法使用,英文汉字太多了,后来就出现了GB2312字符集.
GB2312字符集:
GB2312是中国国家标准局于1980年发布的一种字符集,它是对汉字进行编码的标准。GB2312字符集主要包括汉字、英文字母、数字和一些常用符号。
GB2312使用两个字节表示一个汉字字符,(一个字节是8个二进制位的数据单元),其中第一个字节的范围是0xB0-0xF7,第二个字节的范围是0xA1-0xFE。这样的编码方式可以表示7445个汉字字符。
GB2312主要用于简体中文的字符编码,它是早期中国计算机系统中最常用的字符集之一。
print("你".encode("gb2312"))# b'\xc4\xe3'
GBK:
GBK(Guojia Biaozhun Kuozhan)是中国国家标准局于1995年发布的一种字符集,它是对汉字进行编码的扩展字符集。GBK字符集是在GB2312的基础上进行扩展而来,可以表示更多的汉字字符。
GBK使用双字节编码,与GB2312相同,每个字符使用两个字节来表示。GBK字符集包括GB2312中的所有字符,并添加了大量的繁体中文字符、生僻字和其它语种的字符。通过这种方式,GBK可以表示超过21000个汉字和符号。
GBK字符集被广泛应用于简体中文和繁体中文环境中,特别是在早期的计算机系统和中文操作系统中。然而,随着时间的推移和技术的发展,GBK也逐渐被更先进的字符集如GB18030和Unicode所取代,这些字符集能够更好地支持更广泛的字符和语言。
需要注意的是,GBK和GB2312之间的编码兼容性非常高,大多数GB2312编码的字符在GBK中仍然可以正确解析和显示。
print("你".encode('gbk')) # # b'\xc4\xe3'
问题出现:
问题:不能每一个国家都创建一个字符集吧,在进行信息交流的时候就出现了乱码的问题.
Unicode:
Unicode是一种国际标准字符集,旨在为世界上所有的字符提供唯一的标识符。它定义了字符的编码方式,使不同国家和地区的计算机能够交换和处理多语言文本。
Unicode字符集包含了几乎所有的已知字符,包括不同语言的字符、标点符号、数学符号、技术符号、货币符号等。其编码空间非常大,总共可以表示超过1.1百万个字符。
Unicode采用统一的编码方案,即每个字符分配一个唯一的数字标识符,称为码点(code point)。常用的表示方式是使用十六进制表示码点,例如字母"A"的码点是U+0041,汉字"中"的码点是U+4E2D。
为了表示Unicode字符,需要使用不同的编码方案,其中最常见的是UTF-8、UTF-16和UTF-32。这些编码方案根据字符的码点将其转换为不同长度的字节序列,以便在计算机系统中存储和传输。
Unicode的出现解决了以往字符编码标准的局限性,使得不同语言和文化之间的文本处理更加方便和统一。它被广泛应用于现代计算机系统、操作系统、编程语言和互联网标准中,成为国际化文本处理的基础。
UTF-8:
UTF-8(Unicode Transformation Format-8)是一种常用的Unicode字符编码方案之一。它是一种可变长度的字符编码,能够表示Unicode字符集中的所有字符。
UTF-8使用8位(1个字节)作为基本的编码单元,采用了一种变长的编码方式。具体地说,UTF-8根据字符的码点范围将其转换为1至4个字节的字节序列。
UTF-8的优势在于它既能够完全兼容ASCII字符,又能够表示任意Unicode字符,同时保持了文本数据的紧凑性和兼容性。因此,UTF-8成为了互联网上最常用的字符编码方案之一,被广泛应用于网页、电子邮件、数据库存储以及各种文本文件的处理中。
print('你'.encode('utf-8')) #b'\xe4\xbd\xa0'