Python基础篇–字符编码的学习

前言

  字符编码非常容易出问题,我们要牢记几句话:

  1.用什么编码保存的,就要用什么编码打开

  2.程序的执行,是先将文件读入内存中

  3.unicode是父编码,只能encode解码成其他编码格式

立即学习“Python免费学习笔记(深入)”;

   utf-8,GBK这些是子8编码,只能decode编码成Unicode

一、什么是字符编码

  我们知道,计算机只能识别二进制,我们平时写的代码都需要转成二进制才能被计算机识别。所以,我们写的字符怎么转换成二进制呢,这个过程实际就是通过一个标准使我们写的字符与特定数字一一对应,这个标准就称为字符编码。

  字符——(字符编码)——->数字

二、字符编码发展历程

  1.ASCII码

  计算机起源于美国,字符编码也起源于美国。但是美国人民使用的文字只有26个字母,再加上些特殊符号就搞定了。不像我们中国,小学生就要认识几千个汉字。所以美国人民就使用了ASCII码(美国信息交换标准码)作为字符编码,一个Bytes代表一个字符,1Bytes=8bit,可以有2的8次方即256中不同的变化,但最初只用了前7位,即127个字符,已经足够美国人民使用了(当然也出于成本的考虑)。后来将拉丁文编入第8位,至此,ASCII码就被占满了,英语国家和拉丁国家可以愉快的玩耍了。

  2.GBK

  别看咱们中国暂时科技比不上美帝国,但是咱们有一颗积极向上的心啊,于是,在1980年,国家标准总局发布了中文使用的字符编码–>GBK,使用两个字节表示一个汉字,这样就有2的16次方即65536种组合,已经足够汉字使用了。

  同时,其他国家也分别发布了自己国家的字符编码标准,如日本的shift_JIS,韩国的Euc-kr等等

  3.Unicode

  据说,字符编码鼎盛时期有数百种,且彼此间互相不支持,看来各国人民都很有骨气,但是这太不利于世界的互通了,于是Unicode应运而生。1994年,国际标准化组织发布了号称万国码的Unicode,用两个字节表示一个字符,有65536种组合,已经能把全世界绝大多数语言包括了。

  4.utf-8

  Unicode虽然好,但有一个问题,本来用一个字节就能表示的英文,现在要用两个字节,存储空间平白多出一倍,这显然是不完美的,所以又产生了utf-8,对英文字符只用1个字节,对中文字符用3个字节来表示。 

  5.  Unicode所有字符都是两个字节,简单粗暴,字符转换成数字的速度快,但是占用存储空间大  

     utf-8对不同的字符采用不用的长度表示,节省空间,但是转换效率不如Unicode快

     内存中使用的字符编码是Unicode,内存就是为了加快速度的,所以宁肯牺牲一点空间,也要保证速度

     硬盘和网络传输是用utf-8的,因为磁盘I/O或者网络I/O延迟要远大于utf-8的转换效率,并且在网络传输中应该尽可能节省带宽

三、Python解释器执行

  第一阶段:python解释器启动,此时就相当于启动了一个文本编辑器

  第二阶段:python解释器作为文本编辑器,去打开t.py文件,从硬盘上将t.py的文件内容读入到内存中

  第三阶段:python解释器解释执行刚刚加载到内存中t.py的代码

  

  其中第二阶段,t.py文件在保存时有一个字符编码,在Python解释器打开文件时也要指定一样的编码方式(Python2默认的编码方式是ASCII,Python3默认是utf-8),如果文件保存的编码格式和Python解释器默认的编码方式不一样,就要在文件的开头写上#coding:     ,来告诉python解释器不要用自己默认的编码方式来读,而是要用头文件指定的方式来读文件,这样才不会出错。

  

  第三阶段:读取已经加载到内存中的代码(默认是Unicode),然后执行,执行过程中如果碰到类似定义变量的操作,就会在内存中开辟一块新的内存空间。此时注意,新开辟的内存空间不一定也是Unicode,用户可以在定义变量的时候指定编码方式,定义时开辟的内存空间,也只是一块空间而已,可以存放任意编码格式的代码。以Python3为例

 

  Python基础篇--字符编码的学习

    

四、编码解码  

  保存文件是把内存中的文件保存到硬盘上

  读文件是把硬盘中的文件读到内存

  Python基础篇--字符编码的学习

  Unicode是父编码,utf-8,GBK这些是子编码,如果子码想转换成其他编码,必须要先转换成父编码,再由父编码转换成其他子编码

  解码就是decode,是由子码转成父码Unicode的过程

  编码就是encode,是由Unicode转换成其他编码的过程

  之前说过,文件读入内存中,就成了Unicode编码(当然这是默认情况,也可以根据指令更改),从硬盘读文件的过程就是把硬盘中的utf-8解码成Unicode

  文件保存时,就是由内存保存到硬盘的过程,硬盘中是utf-8的编码方式,需要由Unicode编码成utf-8

五、Python2和Python3的区别

  1.Python2的默认编码方式是ASCII,打开utf-8保存的文件时会报错,应该在头文件上加#coding : utf-8

   Python2中的str被识别为Bytes,所以Python2中的str是被编码后的结果,其实会默认做一件事,就是在str前面加一个u,先转换成Unicode,在encode成bytes

   Python2中有两种字符串类型,str和Unicode,str可以通过在前面加个‘u’来转换成Unicode

  2.python 3 的默认编码方式是utf-8,可以直接打开用utf-8保存的文件

   Python3中的str被识别成Unicode

   Python3中也有两种字符串类型(bytes和str),但bytes就是bytes,str是unicode

 

六、打印到终端

  首先要知道,Windows的终端的默认编码方式是GBK

  终端也是应用程序,是运行在内存中的,所以我们用print()打印的过程,是从内存中到内存中。所以对于unicode,怎么打印都不会出错,但是Python2中除了加‘u’的字符串外,其他的字符串是Bytes,此时终端中是GBK编码,而Python2中是指定的utf-8或者默认的ascii码时,在终端中打印就会出错。

 

 

这些是我目前的理解,如果我以后意识到错误或者有表述不清的地方,再来修改。唉,字符编码是个坑啊

以上就是Python基础篇–字符编码的学习的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2270347.html

(0)
上一篇 2025年2月27日 11:39:00
下一篇 2025年2月26日 19:01:43

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Python邮件如何发送?

    import smtplibfrom email.mime.text import mimetext_user = “1147016115@qq.com”#发件人_pwd = “wcpxldrtuthag…

    2025年2月27日 编程技术
    200
  • python简单线程和协程的实例详解

    python中对线程的支持的确不够,不过据说python有足够完备的异步网络框架模块,希望日后能学习到,这里就简单的对python中的线程做个总结 threading库可用来在单独的线程中执行任意的python可调用对象。尽管此模块对线程相…

    2025年2月27日
    200
  • python基础详解

    目录 python数据类型 python的运算符 Python的循环与判断语句 python练习 Python作业 立即学习“Python免费学习笔记(深入)”; 一.  Python的数据类型   1. 整型(int) .  赋值  nu…

    2025年2月27日 编程技术
    200
  • python中装饰器的简单介绍

    装饰器前奏1 定义:本质是函数,用来装饰其它函数,就是为其他函数来添加附加功能 原则:1、不能修改被修饰函数的源代码以及调用方式 装饰器前奏2   登录后复制登录后复制 import timedef timer(func):def warp…

    编程技术 2025年2月27日
    200
  • python基础知识教学

    第一节 Python文件类型 源代码 python源代码的文件以“py”为扩展名,由python程序解释,不需要编译 字节代码 Python源文件经编译后生成的扩展名为“pyc”的文件 编译方法 import py_compilepy_co…

    编程技术 2025年2月27日
    200
  • python生成词云方法教程

    期末复习比较忙过段时间来专门写scrapy框架使用,今天介绍如何用python生成词云,虽然网上有很多词云生成工具,不过自己用python来写是不是更有成就感。 今天要生成的是励志歌曲的词云,百度文库里面找了20来首,如《倔强》,海阔天空是…

    2025年2月27日
    200
  • 简单FTP的实现详解

    作业要示: 开发简单的FTP:1. 用户登陆2. 上传/下载文件3. 不同用户家目录不同4. 查看当前目录下文件5. 充分使用面向对象知识      REDMAE 1 用户登陆 2 3 1、查看用户目录文件 4 2、上传文件, 5 3、下载…

    2025年2月27日 编程技术
    200
  • python正则的使用方法

    python的正则是通过re模块的支持 匹配的3个函数 match :只从字符串的开始与正则表达式匹配,匹配成功返回matchobject,否则返回none; re.match(pattern, string, flags=0) ##fla…

    编程技术 2025年2月27日
    200
  • 分享Python常用的排序实例

    排序算法的稳定性及意义 冒泡排序 复杂度与稳定性 选择排序 插入排序 立即学习“Python免费学习笔记(深入)”; 希尔排序 快速排序 常见排序算法效率比较 排序算法的稳定性及意义 在待排序的序列中,存在具有相同关键字的记录,在排序后这些…

    2025年2月27日
    200
  • 利用Python抓取花瓣网美图实例

    一:前言 嘀嘀嘀,上车请刷卡。昨天看到了不错的图片分享网——花瓣,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑中。这个妹子主页 是动态加载的,如果想获取更…

    2025年2月27日 编程技术
    200

发表回复

登录后才能评论