字符编码
计算机只能处理数字,如果要处理文本,就必须先把文本转换为计算机能识别的二进制数才能处理,将文本转换为二进制数的过程称为:编码;
- 常见的字符编码格式有:ASCII,unicode,GBK,UTF-8等
ASCII
ASCII (American Standard Code for Information Interchange): 美国信息交换标准代码,一种使用7个或8个二进制位进行编码的方案(标准ASCII码为7位,扩充为8位),最多可以给256个字符(包括英文大小写字母、数字、标点符号、控制字符及其他符号)
GB2312/GBK
要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312
编码,用来把中文编进去。
- GB2312,又称为:《信息交换用汉字编码字符集》,由中国国家标准总局1980年发布,1981年5月1日开始实施的一套国家标准,标准号是[GB 2312](https://baike.baidu.com/item/GB 2312)—1980。
- GB 2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB 2312收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。
- GBK,国标码,又称为:《汉字内码扩展规范》,对原GB2312进行扩充,该标准一经推出,就WINDOWS95所采用。
- GBK支持繁体/简体中文,GB2312只支持简体中文。
Unicode
全世界有上百种语言,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。因此,Unicode应运而生。
- Unicode,(万国码,统一码),Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
- Unicode,又分为两种:ucs-2(2字节的Unicode编码)和ucs-4(4字节的Unicode编码)
UTF-8
新问题的出现:Unicode编码统一采用4字节编码,不利于数据传输,因此,一种对Unicode编码进行压缩的UTF-8编码出现。
- UTF-8,可变长的万国码,最少使用1个字节(8bit),最多使用4个字节数进行编码,常用的英文字母被编码成1个字节,汉字通常是3个字节。
- python3默认使用该编码格式。
计算机系统通用的字符编码工作方式
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8或其他编码。
- 用文本文件编辑文本的时候,从文件读取的UTF-8/GBK字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:
字节
字节是二进制数据的单位。一个字节通常8位长。但是,一些老型号计算机结构使用不同的长度。为了避免混乱,在大多数国际文献中,使用词代替byte。
在多数的计算机系统中,一个字节是一个8位长的数据单位,大多数的计算机用一个字节表示一个字符、数字或其他字符。一个字节也可以表示一系列二进制位。
字节通常简写为“B”,而位通常简写为小写“b”,计算机存储器的大小通常用字节来表示。
字节与bit
数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。
-
ASCII编码:一个英文字母(不分大小写)占一个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数。换算为十进制,最小值-128,最大值127。如一个ASCII码就是一个字节。
-
GBK编码: 一个英文字母占一个字节空间,一个中文字符占两个字节空间。
-
UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节
-
Unicode编码:一个字符占四个字节
-
换算:
1byte = 8bit
1KB(KiB) = 1024byte
1MB(MiB) = 1024KB
1GB(GiB) = 1024MB
1TB(TiB) = 1024GB