字符编码

一、前置知识

  1、三大核心硬件

    所有软件都是运行硬件上的,运行软件相关的三大核心硬件为:CPU、内存、硬盘

    ⑴软件运行前,代码及其相关数据是存放于硬盘中的

    ⑵任何软件启动都是将数据从硬盘读入内存,然后cpu从内存中取出指令并执行

    ⑶软件运行过程中产生的数据最先都是存放于内存中的,若想永久保存产生的数据,则需要将数据由内存写入硬盘

  2、文本编辑器读取文件内容

    ⑴启动一个文件编辑器

    ⑵文件编辑器会将文件内容从硬盘读入内存

    ⑶文本编辑器会将刚刚读入内存的内容显示到屏幕上

  3、python解释器执行文件

    ⑴启动python解释器,相当于启动一个文本编辑器

    ⑵从硬盘将文件内容读取到内存中

    ⑶python解释器执行刚刚读入内存的内容,开始识别python语法

二、字符编码

  1、什么是字符编码

    人类与计算机用的都是人类能懂得语言,而计算机只能识别二进制数,要想计算机能识别字符,必须经历一个翻译过程,翻译后的字符与数字一一对应。字符编码中编码就是翻译或者转换的意思,即将人能理解的字符翻译成计算机能识别的数字

  2、字符编码发展

    ⑴、ASCII码

    现代计算机起源于美国,所以一开始仅仅是让计算机识别英文字符,于是诞生ASCII码

    特点:

      只有英文字符与数字一一对应关系

      一个英文字符由8bit,即1byte表示,最多包含256个数字

 

 

     ⑵各国制定

    中国制定GBK来识别中文和英文字符,日本制定shift_jis,等等

    ⑶Unicode

    想让各种编码全部正常运行而不出现乱码,内存中必须有一种兼容万国的编码,并且该编码需要与其他编码有映射/转换关系,这就是Unicode特点

  3、编码与解码

    编码:encode

      由字符转换成内存中的Unicode,以及由Unicode转换成其他编码的过程,都称为编码

 

 

    解码:decode

      由内存中的Unicode转换成字符,以及其他编码转换成Unicode的过程,都称为解码

 

 

 

   4、utf-8

    Unicode因为是使用固定的两个字节长度存储,如果多国字符中有大量因为字符,使用Unicode会额外占用一倍空间,最致命的是io次数增加,程序运行速度变慢,所以需要将Unicode转化成另外一种精简的格式,这就是utf-8

    utf-8是不定长的:一个英文字符占1个字节,中文占3字节,生僻字占更多字节

    现在计算机都是内存用Unicode编码,硬盘用utf-8编码

三、小结

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

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

  数据的传输:

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

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

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

  保证不乱码核心:

    用什么编码存的数据,就用什么编码取

  python2 :

    默认的字符编码ascii码

  python3:

    默认的字符编码utf-8

  文件头:

    coding:utf-8

  pycharm默认的字符编码是:utf-8;windows操作系统默认字符编码:gbk

posted @ 2019-11-07 16:53  treeter  阅读(202)  评论(0编辑  收藏  举报