1、起源
ASCII表:u'nun起初计算机只是用于做数学计算,渐渐的,人们需要用计算机来处理文字,但计算机内部存储的全是0和1,如何用数字来表示文字?只要用数字来代表每一个字母(共26个),就可以用于处理文字了。于是从A-Z给每一个字母分配一个数字,称为该字母的编码(码点),又给标点符号,阿拉伯数字都进行了编码(总共一百多个)取名ASCII表(美国信息交换表)范围0-127
f一个字节(8个0或1,8个bit全为1时表示255)表示的数字范围为0-255,所以每个字母用一个字节即可。
编码范围:0-9的阿拉伯数字、大小写字母,常用的英文符号,以及控制字符(负责对应换行、回车等特殊的控制功能)
2、发展
随着计算机在世界范围内的普及,各个国家都有处理本国语言文字的需要,于是设计了自己的文字编码表。
中国:GB2312,后来对GB2312进行了扩展称为GBK表(国标扩展码)有两万多行,需要用两个字节表示(2个字节包含16bit,范围0-65535),足够为GBK中的每个汉字分配编码
eg.
汉字 | 数字编码 | 十六进制形式 |
草 | 45789 | B2DD |
大陆使用的Windows系统处理字符是默认使用GBK表(ANSI)
港澳台:BIG5表
由于各国有独立的字符编码表,同一个字在各国的表中不可能对应相同的编码,这就导致了乱码情况的产生,比如一篇文章在大陆显示无误,在台湾的计算机上打开就是一堆乱码。Windows和Linux系统之间文件交换也可能出现乱码情况。
3、统一
为了统一全世界的所有不同编码,Unicode表出现了,最多可以容纳一百多万个字符(包括古象形文字,emoji表情等)如果按之前那样按数字顺序进行编码,这一百多万个字符需要用三个字节(范围:0-1600万)来表示,但欧美语言用一个字节表示足够了,于是后来出现了好几种分配数字编码的方法 eg.UTF-8 、UTF-16、UTF-32,随着时间推移,UTF-8成为了主流(特点:编码长度可变,32比特、24比特、16比特、8比特)。
4、其他
python3默认UTF-8编码,python2默认编码为ASCII
Java默认使用UTF-8编码
锟斤拷常出现于UTF-8和GBK之间的转换中