Day10

字符编码

  字符编码的发展:

    1,一家独大

      现代计算机起源于美国,所以最先考虑仅仅是让计算机识别英文字符,于是诞生了ASCII表    

      # ASCII表的特点:
          1、只有英文字符与数字的一一对应关系
          2、一个英文字符对应1Bytes1Bytes=8bit8bit最多包含256个数字,可以对应256个字符,足够表示所有英文字符

    2,百家齐鸣

      为了让计算机识别自己国家的语言,每个国家都各自的字符,为让计算机能够识别自己国家的字符外加英文字符,各个国家都制定了自己的字符编码表    

      # GBK表的特点:
          1、只有中文字符、英文字符与数字的一一对应关系
          2、一个英文字符对应1Bytes
             一个中文字符对应2Bytes   
             补充说明:
               1Bytes=8bit8bit最多包含256个数字,可以对应256个字符,足够表示所有英文字符
               2Bytes=16bit16bit最多包含65536个数字,可以对应65536个字符,足够表示所有中文字符
      # Shift_JIS表的特点:
          1、只有日文字符、英文字符与数字的一一对应关系

      # Euc-kr表的特点:
          1、只有韩文字符、英文字符与数字的一一对应关系

    3,开始统一     

      于1990年开始研发unicode,1994年正式公布,具备两大特点:     

        #1. 存在所有语言中的所有字符与数字的一一对应关系,即兼容万国字符

        #2. 与传统的字符编码的二进制数都有对应关系,详解如下
            为了解决历史遗留问题所以产生了这个特点,对应关系如下:
              # 英文字符可以被ASCII识别
              英文字符--->unciode格式的数字--->ASCII格式的数字

              # 中文字符、英文字符可以被GBK识别
              中文字符、英文字符--->unicode格式的数字--->gbk格式的数字

              # 日文字符、英文字符可以被shift-JIS识别
              日文字符、英文字符--->unicode格式的数字--->shift-JIS格式的数字

  编码和解码:

    由字符转换成内存中的unicode,以及由unicode转换成其他编码的过程,都称为编码encode

    由内存中的unicode转换成字符,以及由其他编码转换成unicode的过程,都称为解码decode

  utf-8

    为了解决在输入硬盘时包含多国字符问题(unicode直接写入硬盘会额外占用一倍空间并且我们由内存写入硬盘时会额外耗费一倍的时间),这时另一种精简的格式出现了,那就是utf-8.

    由于历史遗留问题,还有很多老版本的东西时用unicode存放的,所以不在内存中直接用utf-8存放

  字符编码的应用

    我们学习字符编码是为了在存取的过程中不产生乱码问题    

      #1. 保证存的时候不乱:在由内存写入硬盘时,必须将编码格式设置为支持所输入字符的编码格式
      #2. 保证存的时候不乱:在由硬盘读入内存时,必须采用与写入硬盘时相同的编码格式

文件处理

  引入:

    ​ 应用程序运行过程中产生的数据最先都是存放于内存中的,若想永久保存下来,必须要保存于硬盘中。应用程序若想操作硬件必须通过操作系统,而文件就是操作系统提供给应用程序来操作硬盘的虚拟概念,用户或应用程序对文件的操作,就是向操作系统发起调用,然后由操作系统完成对硬盘的具体操作。

  文件操作的三步: 

    # 1. 打开文件,由应用程序向操作系统发起系统调用open(...),操作系统打开该文件,对应一块硬盘空间,并返回一个文件对象赋值给一个变量f
    f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r

    # 2. 调用文件对象下的读/写方法,会被操作系统转换为读/写硬盘的操作
    data=f.read()

    # 3. 向操作系统发起关闭文件的请求,回收系统资源
    f.close()

  文件操作模式:

    # r只读模式: 在文件不存在时则报错,文件存在文件内指针直接跳到文件开头
       with open('a.txt',mode='r',encoding='utf-8') as f:
           res=f.read() # 会将文件的内容由硬盘全部读入内存,赋值给res
    # w只写模式: 在文件不存在时会创建空文档,文件存在会清空文件,文件指针跑到文件开头
      with open('b.txt',mode='w',encoding='utf-8') as f:
          f.write('你好\n')
          f.write('我好\n') 
          f.write('大家好\n')
          f.write('111\n222\n333\n')
    #强调:
      # 1 在文件不关闭的情况下,连续的写入,后写的内容一定跟在前写内容的后面
      # 2 如果重新以w模式打开文件,则会清空文件内容
    # a只追加写模式: 在文件不存在时会创建空文档,文件存在会将文件指针直接移动到文件末尾
       with open('c.txt',mode='a',encoding='utf-8') as f:
           f.write('44444\n')
           f.write('55555\n')
    #强调 w 模式与 a 模式的异同:
    # 1 相同点:在打开的文件不关闭的情况下,连续的写入,新写的内容总会跟在前写的内容之后
    # 2 不同点:以 a 模式重新打开文件,不会清空原文件内容,会将文件指针直接移动到文件末尾,新写的内容永远写在最后
 
原文地址:https://www.cnblogs.com/hansblogs/p/13305528.html