python基础|字符编码

     任何一个程序想要运行,必须先有硬盘加载到内存,然后由cpu去内存取只执行。运行着的应用程序的数据,必须在内存运行。python运行文件的三步,首先把python文件解释器读取到内存上,然后应用程序代码文本文件读取到内存上,最后python解释器对程序代码进行编译成计算机识别的代码。

字符编码

   字符编码和文本文件有关。文字,字母,数字符号等都属于字符。常见的文本文件,记事本,word文件等。但是图片和视频不属于文本文件。

   我们写的文件要想之后还可以查看,文件就要存储到硬盘中。其过程就是计算机将字符对应字符编码表翻译成二进制数存入硬盘。早期计算机使用英文字符,存入硬盘占用1Btes,也就是八位二进制(8Bts),
   输入字符  >>>>>>(字符编码表)>>>>>   二进制数
 

# 存储单位小知识
 8bits = 1Bytes
 1024Byes = 1kb
 1024kb = 1Mb
 1024Mb = 1GB
 1024GB = 1T
 1024T = 1P

  后来各个国家也是用计算机,但是使用英文十分不方便。各个国家都绘制自己的编码表,中国是用GBK编码表,中文字符占2Btes。日本使用shift-jis编码表,韩国使用ECU-KR编码表。

万国码unicode

  万国码unicode出现,它可以兼容各国语言,各国语言都可以识别。unicode编码统一所有字符都占2Btes。但是这种编码也有缺点,就是浪费存储空间,程序运行效率低。在此基础上出现了优化的utf-8编码。utf-8编码会将unicode用文字夫由原来的2Btes变成1Btes,将中文的2Btes变成3Btes存入硬盘中。 

  对于存入文件的过程可以理解为:

  数据保存到硬盘
      1, 内存中的unicode格式二进制数据数字 >>>>> (encod) >>>> utf-8
    硬盘中的数据有硬盘读到内存
      1, 硬盘中的utf-8格式的二进制数据   >>>>解码(decode) >>>unincode格式的二进制数据

      要明白的是用户输入分时候,无论输入什么字符都能够兼容万国字符。其他国家的数据有硬盘读到内存的时候unicode与其他各个国家的编码都有对应关系。
   在python2默认使用ASCII码(因为在开发pyhon2解释器时uniocode还没有盛行),而在python3中默认使用的是utf-8。python3字符串默认使用unicode编码格式的二进制数
 文件头

  在文件中的字符编码运行之前,要明白的是,文件以什么格式存入硬盘就应该以什么格式读出来。可以想象这样一个场景,发密电码,发送者以一种编码方式发出,解码者就必须一相同编码方式才能解密。如果不是,那么将会得到一堆乱码。计算机也是如此

# 以gbk格式存入编码,以utf-8格式解码
a = '学习'            # 数据字符串‘学习’
a1 = a.encode('gbk')    # 以gbk格式存入
a2 = a1.decode('utf-8')    # 以utf-8格式读出
print(a2)    # 结果是可以读但是无法解码,导致乱码
ѧϰ    
# 以gbk格式存入,以gbk格式读出
a = '学习'            # 数据字符串‘学习’
a1 = a.encode('gbk')    # 以gbk格式存入
a2 = a1.decode('gbk')    # 以utf-8格式读出
print(a2)
学习

总结:

  在读取文件的时候,如果乱码,很大可能就是读的时候与存入编码格式不同所致


    (在文件看到:# coding:utf-8 ,它的意思告诉解释器用utf-8编码解码。)

原文地址:https://www.cnblogs.com/huaiXin/p/11140478.html