• Python之字符编码(Day10)


    1. python解释器执行py文件的原理 ,例如python test.py

            第一阶段:python解释器启动,此时就相当于启动了一个文本编辑器

        第二阶段:python解释器相当于文本编辑器,去打开test.py文件,从硬盘上将test.py的文件内容读入到内存中(小复习:pyhon的解释性,决定了解释器只关心文件内容,不关心文件后缀名)

        第三阶段:python解释器解释执行刚刚加载到内存中test.py的代码( ps:在该阶段,即执行时,才会识别python的语法,执行文件内代码,执行到name="egon",会开辟内存空间存放字符串"egon")

     

     2. unicode ,UTF-8

      2.1   unicode的由来, 统一用2Bytes代表一个字符, 2**16-1=65535,可代表6万多个字符,因而兼容万国语言

      作用:  unicode:简单粗暴,所有字符都是2Bytes,优点是字符->数字的转换速度快,缺点是占用空间大

     

      2.2  UTF-8的由来,但对于通篇都是英文的文本来说,这种编码方式无疑是多了一倍的存储空间(二进制最终都是以电或者磁的方式存储到存储介质中的)

    于是产生了UTF-8,对英文字符只用1Bytes表示,对中文字符用3Bytes

      作用:  utf-8:精准,对不同的字符用不同的长度表示,优点是节省空间,缺点是:字符->数字的转换速度慢,因为每次都需要计算出字符需要多长的Bytes才能够准确表示

     

    1. 内存中使用的编码是unicode,用空间换时间(程序都需要加载到内存才能运行,因而内存应该是尽可能的保证快)
    2. 硬盘中或者网络传输用utf-8,网络I/O延迟或磁盘I/O延迟要远大与utf-8的转换延迟,而且I/O应该是尽可能地节省带宽,保证数据传输的稳定性

    2.3  字符编码的使用

    unicode  ------->encode--------->UTF-8

    UTF-8------->decode--------->unicode

    3.1  分析过程

    文件从内存刷到硬盘的操作简称存文件

    文件从硬盘读到内存的操作简称读文件

    注释:

    如果不在python文件指定头信息#-*-coding:utf-8-*-,那就使用默认的

    python2中默认使用ascii,python3中默认使用utf-8

     

    3.2  在Python3中两种字符串类型 str和bytes

    str是unicode

    #coding:utf-8
    s='' #当程序执行时,无需加u,'林'也会被以unicode形式保存新的内存空间中,
    
    #s可以直接encode成任意编码格式
    s.encode('utf-8')
    s.encode('gbk')
    
    print(type(s)) #<class 'str'>

    本节总结

    1.以什么编码存的就要以什么编码取出

    ps:内存固定使用unicode编码

      我们可以控制的编码是往硬盘存放或者基于网络传输选择编码

    2.数据是最先产生于内存中,是unicode格式,要想传输需要转成bytes格式

    #unicode ---------->encode(utf-8)---------->bytes

    拿到bytes--------->decode(gbk)---------->unicode

    3.python3中字符串被识别成unicode

    python中的字符串encode得到bytes

    二.

    open:

    1.会向操作系统发起系统调用,操作会打开一个文件

    2.在python程序中会产生一个值指向操作系统打开那个文件,我们可以把该值赋给一个x。

    回收资源

    1.f.close():      关闭操作系统打开的文件,即回收操作系统的资源

    2.del f:   没必要做,因为在python程序运行完毕后,会自动清理与该程序有关的所有内存占用

    f = open(r'aaaaa.py','r',encoding='utf-8')
    #print(f.read())
    
    #print(f.readline(),end=")
    print(f.readlines())
    f.close()
    有一种能力,是持续不断的努力
  • 相关阅读:
    获得ip地理信息的几种方法
    设置 phoneGap/Cordova 3.4 应用程序启动动画闪屏 SplashScreen
    backbone实例01
    即使世界明天毁灭,我今天也要种下葡萄树
    真言真语
    美文美句
    25个实用的jQuery技巧和解决方案
    突袭HTML5之WebGL 3D概述
    敏捷开发之Scrum扫盲篇
    javascript中undefined和null的区别详解
  • 原文地址:https://www.cnblogs.com/shaojiafeng/p/7230853.html
Copyright © 2020-2023  润新知