• 字符编码


    字符编码

    • 前置知识点

    1.程序执行的三大核心硬件

    CPU

    内存

    硬盘

    正常执行一个程序的要点:

    ​ 1、将硬盘中的数据读到内存

    ​ 2、由CPU读内存中的数据进行执行

    ​ 3、在执行程序的时候,生成的数据,优先存入内存

    2.python解释器执行一个py文件的过程

    ​ 如果没有python解释器,py文件单纯就是一个文本文件,所以,想执行py文件,必须先执行python解释器

    ​ 1.将python解释器的代码由硬盘读到内存

    ​ 2.将py文件以普通文本文件的格式由硬盘读到内存

    ​ 3.python解释器去内存中读取py文件的数据

    ​ 4.识别python语法,执行相应的操作

    python解释器和文本文件编辑器的区别:

    1.相同点:前两个阶段二者完全一致,都将硬盘中文件的内容读到内存

    2.不同点:文本编辑器将文件内容读到内存后,是为了显示或者编辑,根本不会理会python的用法,但是python解释器将文件内容读到内存后,是为了执行python代码、会识别python语法


    • 字符编码

    ​ 字符:世界上一切语言、文字

    ​ 有必要考虑,图片文件、音频文件、视频文件?

    文件的输入和输出是两个过程

    人类输入的内容都是人类自己可以识别的字符

    计算机只能识别二进制字符(101010)

    将人类的字符,存入内存和硬盘,要经理一个过程:

    人类的字符>>>翻译(字符编码表)>>>计算机二进制


    • 字符编码表

    • ASCII码表(美国)

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

      • 只有英文字符与数字的一一对应关系
      • 用八位二进制来代表一个英文字符,一个英文字符对应1Bytes,1Bytes=8bit,8bit最多包含256个数字,对应256个字符足够表示所有英文字符
    • GBK表(中国)

      为了让计算机能够识别中文和英文,中国人定制了GBK

      • 只有中文字符、英文字符与数字的一一对应关系

      • 一个英文字符对应1Bytes

        一个中文字符对应2Bytes

        补充:

        1Bytes=8bit,8bit最多包含256个数字,可以对应256个字符,足够表示所有英文字符

        2Bytes=16bit,16bit最多包含65536个数字,可以对应65536个字符,足够表示所有中文字符

    • Unicode(万国符)

      为了兼容所有的国家的字符,生成Unicode

      • 存在所有语言中的所有字符与数字的一一对应关系
      • 与传统的字符编码的二进制数都有对应关系
      • 占用存储空间
      • IO次数增加,程序运行速度变慢(最致命)

    在Unicode二进制数据存入硬盘的时候,做优化

    Unicode与其他编码有相应的映射/转换关系:

    文本编辑器输入任何字符都市最新存在于内存中,是Unicode编码的,存放于硬盘中,则可以转换成任意其他编码,只要该编码可以支持相应的字符


    • 编码与解码

      • 编码(encode):由字符转换成内存中的Unicode,以及由Unicode转换成其他编码的过程,都成为编码encode
      • 解码(decode):由内存中的Unicode转换成字符,以及由其他编码转换成Unicode的过程,都成为解码decode

    在诸多文件类型中,只有文本文件的内存是由字符组成的,因而文本文件的存取也涉及到字符编码的问题

    • utf-8:全称:Unicode Transformation Format,即Unicode的转换格式
      • utf-8只与Unicode由对应关系
      • 所有的英文字符用1个bytes表示
      • 所有的中文字符用3个btes表示

    现在的计算机:

    ​ 内存都是:Unicode

    ​ 硬盘都是:utf-8

    数据传输:

    ​ 优先以自己的本国字符编码进行传递

    1.用户无论输入什么字符,存入内存,Unicode都可以兼容

    2.硬盘中无论是什么编码类型的文件,读到内存,都可以兼容Unicode

    Unicode二进制字符(内存)>>>编码(encode)>>>utf-8二进制字符(硬盘)

    utf-8二进制字符(硬盘)>>>解码(decode)>>>Unicode二进制字符(内存)

    保证不乱码的核心就是:用什么编码存的数据,就用什么编码取

    补充

    python2:

    ​ 默认字符编码是ASCII码(因为当时的Unicode还没有盛行)

    python3:

    ​ 默认的字符编码是utf-8

    文件头:

    # coding:utf-8

    告诉你的计算机,你的这个文件是用什么编码写的

    用英文字符,是为了让所有计算机都可以识别

    pycharm默认的字符编码是:utf-8

    Windows默认的字符编码是:GBK

  • 相关阅读:
    Java加密作业
    作业
    思考动手
    方法作业
    课堂2数字输出
    字符型转整形
    课堂验证作业
    Eclipse @override报错解决
    用注解配置动态代理
    动态代理模式
  • 原文地址:https://www.cnblogs.com/YGZICO/p/11822729.html
Copyright © 2020-2023  润新知