• 字符编码


    1.计算机基础:应用程序、操作系统、硬件

    应用程序:任何操作硬件的请求都需要向操作系统发起系统调用,然后由操作系统去操作硬件

    • 启动应用程序:
      • 双击qq
      • 操作系统接受指令然后把该操作转化为0和1发送给CPU
      • CPU接受指令然后把指令发送给内存
      • 内存接受指令把指令发送给硬盘获取数据
      • qq在内存中运行

    2.文本编辑器存取文件的原理:

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

    3.写文本的流程:

    • 在记事本中按下键盘中j的时候
    • 记事本和操作系统交互,把这个按下j的指令转化为0和1
    • 操作系统发送给指令给CPU
    • CPU说把这个0和1的指令转化为j
    • 然后再由显示器显示

    期间发生的转化过程我们称之为字符编码

    j---->0和1 #存储

    0和1--->j #取

    统称为字符编码

    4. 什么是字符编码?

    ​ 计算机只认识数字。

    ​ 但是,我们平时在使用计算机时,用的都是人类能读懂的字符(用高级语言编程的结果也无非是在 文件内写了一堆字符)。

    ​ 让计算机读懂人类的字符,必须经过一个过程:

    • 字符 -------->翻译过程 ------->数字

    ​ 总而言之,字符编码是将人类的字符编码成计算机能识别的数字,这种转换必须遵循一套固定的标准,该标准无非是人类字符与数字的对应关系,称之为字符编码表。

    5. 涉及到字符编码的两个场景

    1. 一个Python文件中的内容是由一堆字符组成的,存取均涉及到字符编码问题(Python文件并未执行,前两个阶段均属于该范畴)。
    2. Python中的数据类型字符串是由一串字符组成的(Python文件执行时,即第三个阶段)。

    6. 字符编码发生在哪三个阶段

    • 存: 内存到硬盘

    • 取: 硬盘到内存

    • Python3解释器解释

      最早我们的电脑只认识英文,256个足够用了,8位二进制位作为一个对应表,称之为ASCII表

    7. 字符编码的发展史(utf8的由来):

    • 电脑是美国创造出来的,电脑只认识0和1,但是美国人想输入一个a字符进去,所以必须得建立一套字符编码,让0011100表示成a,建立一套ASCII码表

    • 但是其他国家也开始使用电脑了,ASCII码表不能满足需求了,所以各个国家建立了自己的字符编码表

    • 各个国家的码农都用自己国家的编码表写了各种各样的代码

    • 但是每个国家自己的编码表只适合自己用,别人用会报错

    • 研制出了Unicode,Unicode能认识所有国家的字符,可以使用Unicode的编码保存到硬盘中,但是Unicode的编码太浪费内存,最后做出了一套精简的utf8编码

      备注:上述说到的报错其实就是乱码

    8. ding: utf-8 控制的是Python3作为文本编辑的时候以什么编码格式读取文本内容,python3默认是utf-8的形式读取字符

    python解释器解释语法

    解释定义变量的语法,会新开辟一块内存空间放入这个变量,然后假设这个变量在python3中以utf-8的形式存储,如字符x = '中',被python3解释后在内存中会变成x=000001101010.理论上print(x)相当于输出000001101010,但是这个000001101010对于程序员来讲看不懂,所以python3创始人龟叔做了这个操作-把000001101010编码按终端的编码格式输出编码后的结果,如.如果终端的编码为gbk,终端无法识别000001101010.所以新开辟空间放入变量的时候,就用unicode转换,则终端无论是什么形式的编码格式,都能够识别并打印.

    9. 乱码分析:

    首先明确概念

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

    乱码的两种情况:

    • 乱码一:存文件时就已经乱码
    • 乱码二:存文件时不乱码而读文件时乱码

    存文件时用utf-8编码,保证兼容万国,不会乱码,而读文件时选择了错误的解码方式,比如gbk,则在读阶段发生乱码,读阶段发生乱码是可以解决的,选对正确的解码方式就ok了。

    总结(掌握)

    1. 保证不乱码的核心法则就是,字符按照什么标准而编码的,就要按照什么标准解码,此处的标准指的就是字符编码。

    2. 内存中的编码格式统一都是unicode

      从内存到硬盘的过程,即Unicode--->encode(编码)----->gbk 称为编码;

      从硬盘到内存的过程,即gbk---->decode(解码)----->unicode称为解码

      pycharm 右下角控制的是你写入的代码字符以什么编码格式保存

    3. 在内存中写的所有字符,一视同仁,都是Unicode编码,比如我们打开编辑器,输入一个“你”,我们并不能说“你”就是一个汉字,此时它仅仅只是一个符号,该符号可能很多国家都在使用,根据我们使用的输入法不同这个字的样式可能也不太一样。只有在我们往硬盘保存或者基于网络传输时,才能确定”你“到底是一个汉字,还是一个日本字,这就是Unicode转换成其他编码格式的过程了。简而言之,就是内存中固定使用的就是Uncidoe编码,我们唯一能改变的就是存储到硬盘时使用的编码。

    字符编码应用之Python

    1.Python解释器的原理:

    • 启动Python解释器,Python解释器相当于一个文本编辑器0000

    • 打开文件,读出文件的内容,Python解释器相当于一个文本编辑器。--->发生了字符编码name='jick'

    • Python解释器解释name='nick',然后才有语法的概念。--->发生了字符编码 0000

      0000000(硬盘中)----->name='nick'(内存)----->开辟一块内存空间---->00001010

    2.Python解释器和文本编辑器的区别

    • 都能干什么:

      ​ 把硬盘中躺着的数据读入到内存中,并显示

    • 不同:

      ​ Python解释器还会多执行解释的步骤

    3.python3

    ​ Python3中str都是Unicode编码的,所以Python3中的str类型的数据可以编码成其他字符编码的格式,编码的结果为bytes类型。

    ​ 很重要的一点是:看到Python3中x.encode('gbk') 的结果xc9xcf正是Python2中的str类型的值,而在Python3是bytes类型,在Python2中则是str类型。

  • 相关阅读:
    Linux 忘记root密码
    Linux 基础命令
    Linux 运行级别
    Oracle 体系结构
    Oracle 数据库启动过程
    数据库设计范式
    Oracle通过ROWID删除表中重复记录
    JACASCRIPT--的奇技技巧的44招
    css 的小细节,小总结
    关于我们DOM的知识点
  • 原文地址:https://www.cnblogs.com/gongjingyun123--/p/10932818.html
Copyright © 2020-2023  润新知