二进制换算等级
8bit = 1Bytes 1024Bytes = 1KB 1024KB = 1MB 1024MB = 1GB 1024GB = 1TB 1024TB = 1PB
字符编码发展史
字符编码表 ASCII码 只有英文字母和符号与数字的对应关系 用8位二进制(1bytes)表示一个英文字符 GBK:中文 英文 符号与数字对应关系 用2bytes表示一个中文符号 兼容英文字符 shift:日国 euck:韩国 unicode:万国码 utf-8:
各个编码特点
ASCII:表达数量有限 但单位体积小 GBK:在ASCII码基础上添加了更多的中文文字的表达二进制,但单位体积增大 unicode:在各个国家自己的编码的基础上规定了16个bit就是2字节来表示各国的文字,每个国家的文字对应unicode都有一个对应的关系表,缺点字母体积翻倍,不利于纯属和减慢了1倍的传输效率. utf-8:在unicode的基础上更加灵活,字母为1个字节,中文为3个字节等等.虽然中文变3个字节,但是总体的效率依然是比gbk更高,所以还是以utf-8为主流编码格式
编码解码的python方法
res1 = bytes(x,encoding='utf-8') print(res1,type(res1)) res2 = str(res1,encoding='utf-8') print(res2,type(res2)) res = x.encode('utf-8') print(type(res)) print(res.decode('utf-8'))
保证不乱码的核心:
当初以什么编码存的(encode) 就以什么编码取(decode)
文件头
# coding:编码格式 列入: # coding:utf-8 美化点可以写成这样: # -*- coding:utf-8 -*-
识别python代码问题
如果不指定文件头 中文没法存储 那是因为python2解释器识别语法存储数据的时候默认使用的是ASCII 如果指定了文件头 python2解释器识别语法存储数据的时候使用文件头指定的编码 python2中通常都会在中文的字符串前面加一个u x = u'上' 告诉python2解释器将上存成unicode的形式
而python3 将py文件按照文本文件读入解释器中默认使用utf-8
python诞生之时,unicode并未像今天这样普及,很明显,好的东西你能看得见,龟叔早就看见了,龟叔在python3中将str直接存成unicode,我们定义一个str,无需加u前缀,就是一个unicode