字符编码 二进制换算等级 字符编码发展史 各个编码特点 编码解码的python方法 文件头 识别python代码问题 个人设立的一个编码解码的情境

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

个人设立的一个编码解码的情境

设立使用者电脑为window系统为例子.

以python2X为例:   

  第一步:  我写在屏幕上的数据是gbk,但是运行的时候Python2解释器的原因会把这些数据包括字符串都转化为ascii ,其他都以通过unicode的编码表自动转化为unicode,但是字符串无能为力,因为该字符串为ASCII存储,设立我的字符串为中文,那ASCII码没有正确的表达方式来表达我的这个字符串 这个时候就出现了储存问题.   

  第二步:  之后因为我的电脑是windows,windows默认的编码方式为gbk,这个时候存储的文件编码格式也为为gbk,

  第三步:  然后通过windows终端调用python2来执行这个代码它的默认编码为gbk,相关代码会以gbk解码,转化成unicode到内存中

  问题1: windows上执行其他不会出问题,但是字符串汉字就出现了乱码.

  解决这种情况方法, 在第一步的读取代码的时候就需要设置对应读取编码的文件头 这边的 对应读取 对应的是写在屏幕上的文件内容转化到内存这过程 比如这边设置gbk 那么之后的文件在windows上执行就不会出现问题