zoukankan      html  css  js  c++  java
  • 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()
    有一种能力,是持续不断的努力
  • 相关阅读:
    Node 12 值得关注的新特性
    vue实现PC端调用摄像头拍照人脸录入、移动端调用手机前置摄像头人脸录入、及图片旋转矫正、压缩上传base64格式/文件格式
    解决Vuex刷新页面数据丢失问题 ---- vuex-persistedstate持久化数据
    博客搬迁到 gitHub + hexo 去了, 博客园以后比较少更新
    Jenkins结合shell脚本实现(gitLab/gitHub)前端项目自动打包部署服务器
    GET 和 POST 的区别 以及为什么 GET请求 比 POST请求 更快
    Git常用命令及使用,GitLab/GitHub初探,Git/Svn区别
    pc端结合canvas实现简单签名功能
    N的阶乘末尾0的个数和其二进制表示中最后位1的位置
    实现一个动态存储分配
  • 原文地址:https://www.cnblogs.com/shaojiafeng/p/7230853.html
Copyright © 2011-2022 走看看