zoukankan      html  css  js  c++  java
  • Python中的字符编码

    字符编码

    一、计算机基础

    1. cpu:控制程序的运行(从内存中取出文本编辑器的数据读入内存)
    2. 内存:运行程序(经cpu操作后,内存中含有文本编辑器的数据)
    3. 硬盘:存储数据(文本编辑器)

    二、文本编辑器存取文件的原理

    1. 打开编辑器就是启动了一个进程,是在内存中的,所有,用编辑器编写的内容也都是存放于内存中的,断电后数据消失。
    2. 要想永久保存,需要点击保存按钮,编辑器把内存的数据刷到了硬盘上。
    3. 我们编写一个py文件(没有执行),跟编写其他文件没有任何区别,都只是在编写一堆字符而已。

    三、Python解释器执行py文件的原理

    • 第一阶段:Python解释器启动,此时就相当于启动了一个文本编辑器
    • 第二阶段:Python解释器相当于文本编辑器,去打开test.py文件,从硬盘上将test.py的文件内容读入到内存中(小复习:Python的解释性,决定了解释器只关心文件内容,不关心文件后缀名)
    • 第三阶段: Python解释器解释执行刚刚加载到内存中test.py的代码( ps:在该阶段,即真正执行代码时,才会识别Python的语法,执行文件内代码,当执行到name="egon"时,会开辟内存空间存放字符串"egon")

    四、Python解释器与文本编辑器的异同

    • 相同点:Python解释器是解释执行文件内容的,因而Python解释器具备读py文件的功能,这一点与文本编辑器一样。
    • 不同点:文本编辑器将文件内容读入内存后,是为了显示或者编辑,根本不会理会Python的语法,而Python解释器将文件内容读入内存,是为了执行Python代码、会识别Python的语法。

    五、字符编码

    1、字符编码

    字符编码:二进制和我们所认识的字符之间的相互转换的一个过程。

    最早的字符编码为ASCII,只规定了英文字母数字和一些特殊字符与数字的对应关系。

    之后中国人规定了自己的标准gb2312编码,日本人规定了Shift_JIS编码,韩国人规定了Euc-kr编码。

    2、什么情况会出现乱码

    当编码格式不统一的时候就会出现乱码。

    文本编辑器支持的是utf8,你输入的是gbk --> 文件的存储

    文件存储用了utf8,但是下次打开用了gbk --> 文件的读取

    3、乱码的两种情况

    中文的文本编辑器只认识中文,然后你输入了日文 --> 乱码 # encode编码

    文本编辑器存储了中文(文件),但是你用日本的编辑器打开这个文件 --> 乱码 # decode 解码

    4、解决乱码

    什么格式存储,就什么格式读取,就不会乱码

    文件的三种打开模式

    # 'r'模式:只读模式
    f = open('test.py', 'r', encoding='utf-8')
    print(f.read())  # 读取文件所有内容
    print(f.readable())  # 文件是否可读
    print(f.readline())  # 一行一行读取文件
    print(f.readlines())  # 读取文件所有内容保存为列表
    f.close
    
    # 'w'模式:只写模式
    f = open('test.py', 'w', encoding='utf-8')
    s = 'asdaczca'
    f.write(res)  # 清空后再写
    print(f.writeable())  # 文件是否可写
    f.writelines(['aasda', 'adsda']) 
    f.close()
    
    # ’a'模式:追加模式
    f = open('test.py','a', encoding='utf8')
    f.write('nick handsome')  # 文件末追加
    f.close()
    
    # with管理上下文
    with open('test.py', 'r', encoding='utf-8') as f:
        print(f.read)
    
  • 相关阅读:
    Oracle修改表Table所属表空间及Clob、Blob字段的处理
    MyBatis返回多表连接结果
    MyBatis查询结果resultType返回值类型详细介绍
    SpringBoot之分页PageHelper
    Postman简单用法以及转cURL等命令的正确姿势
    postman 巧用cURL
    Spring Boot设置跨域访问
    springboot设置cors跨域请求的两种方式
    @Configuration使用
    @GetMapping和@PostMapping接收参数的格式
  • 原文地址:https://www.cnblogs.com/17vv/p/11316141.html
Copyright © 2011-2022 走看看