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编码解码。)

  • 相关阅读:
    ORA-12801/ORA-12853: insufficient memory for PX buffers: current 274880K, max needed 19722240K/ORA-04031解决方法
    关于oracle result_cache
    oracle insert、append、parallel、随后查询的redo与磁盘读写
    关于ashrpt中行源的CPU + Wait for CPU事件深入解读
    resmgr:cpu quantum 等待事件 top 1
    ORA-00600: internal error code, arguments: [kcblin_3], [103], [253952], [8192], [32769], [312], [640], [], [], [], [], []解决方法
    Oracle之with as和update用法
    oracle查询buffer cache中undo大小
    oracle group by placement可能导致错误结果的bug
    maven maven-war-plugin 解决java war项目间的依赖(两个war都可独立部署运行,maven 3.2.x亲测)
  • 原文地址:https://www.cnblogs.com/huaiXin/p/11140478.html
Copyright © 2011-2022 走看看