• 字符编码


    1.写文本的流程:

    • 在记事本中按下键盘中j的时候

    • 记事本和操作系统交互,把这个按下j的指令转化为0和1

    • 操作系统发送给指令给CPU

    • CPU说把这个0和1的指令转化为j

    • 然后再由显示器显示

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

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

      0和1--->j #取

      统称为字符编码

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

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

    3.Python解释器的原理:

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

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

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

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

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

    • 都能干什么:

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

    • 不同:

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

    5.什么是字符编码?

    ​ 计算机只认识数字。

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

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

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

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

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

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

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

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

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

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

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

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

    • 存: 内存到硬盘

    • 取: 硬盘到内存

    • Python3解释器解释

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

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

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

    1o.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编码,我们唯一能改变的就是存储到硬盘时使用的编码。

  • 相关阅读:
    Java利用Base64编码和解码图片文件
    SQL查询结果列拼接成逗号分隔的字符串:group_concat
    两个正则表达式:匹配固定电话号码,匹配手机号码
    IDEA导入Junit jar包,在JavaSE的Module中使用Junit测试
    如何正确遍历删除List中的元素(普通for循环、增强for循环、迭代器iterator、removeIf+方法引用)
    Java Springboot 根据图片链接生成图片下载链接 及 多个图片打包zip下载链接
    fastjson List<> 转Json , Json 转List<>
    PHP结合memcacheq消息队列解决并发问题
    Redis与Memcached的区别
    yii2 中excel表导出
  • 原文地址:https://www.cnblogs.com/zhuyuanying123--/p/10932876.html
Copyright © 2020-2023  润新知