第五篇:python基础之字符编码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第五篇:python基础之字符编码相关的知识,希望对你有一定的参考价值。

1. 计算机基础知识(三幅图)

技术分享

2. 文本编辑器存取文件的原理(nodepad++,pycharm,word)

打开编辑器就打开了启动了一个进程,是在内存中的,所以在编辑器编写的内容也都是存放与内存中的,断电后数据丢失

             因而需要保存到硬盘上,点击保存按钮,就从内存中把数据刷到了硬盘上。

             在这一点上,我们编写一个py文件(没有执行),跟编写其他文件没有任何区别,都只是在编写一堆字符而已。

 3python解释器执行py文件的原理 ,例如python test.py

1.第一阶段,python解释器启动,相当于启动了一个文本编辑器。

2.第二阶段,python解释器相当于文本编辑器,去打开test.py文件,从硬盘上将test.py的文件内容读入到内存中(小复习:pyhon的解释性,决定了解释器只关心文件内容,不关心文件后缀名)

3.第三阶段,执行刚刚加载在内存中的文件代码

 

总结:

python解释器与文本编辑器的异同:

相同点:python解释器是解释执行文件内容的,因而python解释器具备读py文件的功能,这一点与文本编辑器一样

不同点:文本编辑器存入内存是为了显示,编辑,而python解释器是为了执行。

二 什么是字符编码

计算机只能读懂0,1即二进制数,如何让计算机读懂人类的字符,这就要通过一个转换的过程,即字符-->(转换)--数字

这个过程就可以称作为字符编码

三 字符编码的发展史

阶段一;现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII

ASCll:一个Bytes带表一个字符,一个Bytes=8bit   8bit可以表示0-2**8-1种变化,即可以表示256个字符

阶段二:为了满足中文,中国人定制了GBK

  GBK:2Bytes代表一个字符

  为了满足其他国家,各个国家纷纷定制了自己的编码

  日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr

这个时候就出现了Unicode     统一用2Bytes代表一个字符, 2**16-1=65535,可代表6万多个字符,因而兼容万国语言

但对于通篇都是英文的文本来说,这种编码方式无疑是多了一倍的存储空间(二进制最终都是以电或者磁的方式存储到存储介质中的)

于是产生了UTF-8,对英文字符只用1Bytes表示,对中文字符用3Bytes

需要强调的一点是:

unicode:简单粗暴,所有字符都是2Bytes,优点是字符->数字的转换速度快,缺点是占用空间大

utf-8:精准,对不同的字符用不同的长度表示,优点是节省空间,缺点是:字符->数字的转换速度慢,因为每次都需要计算出字符需要多长的Bytes才能够准确表示

 

总结;

1.内存中使用的编码是Unicode,用空间换时间

2.硬盘中或者网络中使用utf-8  ,稳定(空间还要小)

五 字符编码的使用

5.1 文本编辑器一锅端

Unicode--->encode-->utf-8

utf-8-->decode-->Unicode

技术分享

总结:

无论是何种编辑器,要防止文件出现乱码(请一定注意,存放一段代码的文件也仅仅只是一个普通文件而已,此处指的是文件没有执行前,我们打开文件时出现的乱码)

核心法则就是,文件以什么编码保存的,就以什么编码方式打开

文件test.py以gbk格式保存,内容为:

  x=‘林‘

无论是

  python2 test.py

还是

  python3 test.py

都会报错(因为python2默认ascii,python3默认utf-8)

除非在文件开头指定#coding:gbk

5.2 程序的执行

python test.py   (我再强调一遍,执行test.py的第一步,一定是先将文件内容读入到内存中)

 

阶段一:启动python解释器

阶段二:python解释器此时就是一个文本编辑器,负责打开文件test.py,即从硬盘中读取test.py的内容到内存中

此时,python解释器会读取test.py的第一行内容,#coding:utf-8,来决定以什么编码格式来读入内存,这一行就是来设定python解释器这个软件的编码使用的编码格式这个编码,

阶段三:读取已经加载到内存的代码(unicode编码的二进制),然后执行,执行过程中可能会开辟新的内存空间,比如x="egon"

内存的编码使用unicode,不代表内存中全都是unicode编码的二进制,

在程序执行之前,内存中确实都是unicode编码的二进制,比如从文件中读取了一行x="egon",其中的x,等号,引号,地位都一样,都是普通字符而已,都是以unicode编码的二进制形式存放与内存中的

但是程序在执行过程中,会申请内存(与程序代码所存在的内存是俩个空间),可以存放任意编码格式的数据,比如x="egon",会被python解释器识别为字符串,会申请内存空间来存放"hello",然后让x指向该内存地址,此时新申请的该内存地址保存也是unicode编码的egon,如果代码换成x="egon".encode(‘utf-8‘),那么新申请的内存空间里存放的就是utf-8编码的字符串egon了

python文件处理

技术分享

 

 

 

技术分享

 

 

技术分享

 

技术分享

 

以上是关于第五篇:python基础之字符编码的主要内容,如果未能解决你的问题,请参考以下文章

Python开发第五篇:Python基础之杂货铺

Python成长之路第五篇:Python基础之模块

Python开发第五篇:Python基础之迭代器生成器

Python成长之路第五篇:Python基础之装饰器

Python之路第五篇python基础 之初识函数

Python成长之路第五篇:Python基础之文件处理