字符编码

二进制换算等级

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

 

上一篇:序列化模块


下一篇:基于hadoop的电影推荐结果可视化