内部存储:python文件读取的时候是把存储在内存里的0,1的数据按照你想按照的的编码的方式进行分隔成固定格式读取,比如ASCII码是一个字节,GBK英文兼容ASCII码,GBK汉字是两个字节(GBK通过连续两个八位的最高位是否都是‘1’来区分是否是汉字),UTF-8英文兼容ASCII码,UTF-8的汉字是三个字节。
编码转换:
Python3中文件读取会按照你制定的或者默认的编码方式读取,把分好的一段段数据自动进行转换成unicode。python3中字符串没有decode函数,python3中会直接转成Unicode的形式,不需要转换成Unicode形式了,字符串(str)可以先encode成字节码(bytes),再decode成想要的编码类型(错)(有问题,其实是str--->(encode)--->bytes,bytes--->(decode)--->str
中间并没有类似于Unicode的中间编码类型转换,而是单纯的字节码的重新按decode(‘X’),X的方法来重新编码,要是读取的时候的编码方式Y和X的方式不一样,就会乱码,至于Y,文件读取时,文件的编码方式就是Y,如果程序里的str的话就没有确切的类型而是Unicode,它需要先encode(“Z”),按照Z的方式来解码,把str转换成字节码,才能使用decode函数,这时的X与Z一致才不会乱码)。
因为内存里面直接是Unicode的形式,想转换成什么编码直接encode(X)就行了,只不过这里是字节码bytes,想要转换成字符串只要:
str(字节码,encode=X)
Python2则要自己先用decode(’X’)转换成Unicode,在通过encode(‘Y’)转换成Y编码类型,例如:按照utf-8进行分段后将数据段通过decode(‘utf-8’)将utf-8转换成Unicode的形式,如果需要可以将Unicode的形式通过encode(‘gbk’)转换成gbk的编码方