zoukankan      html  css  js  c++  java
  • 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编码解码。)

  • 相关阅读:
    motion
    Owe Her
    优于自己的过去
    eclipse中开发js会卡,去掉.project中的validate即可
    项目经理的责任
    话不说满_话不说绝_要给自己留后路_留余地
    create table repo_folder_operate_log_bak as select * from repo_folder_operate_log;
    Introduction to Mathematical Thinking
    coursera 《现代操作系统》 -- 第十三周 期末考试
    coursera 《现代操作系统》 -- 第十一周 IO系统
  • 原文地址:https://www.cnblogs.com/huaiXin/p/11140478.html
Copyright © 2011-2022 走看看