py2与py3的字符编码的区别
今天的憨憨们给自己打气了没有,给老子打气!
今日洗脑金句:方向正确,让你高歌猛进,顺势前行,让你势不可挡,道路优势,为你创造捷径!
字符编码
一、计算机基础
二、文本编辑器存取文件的原理
1.打开编辑器就是启动了一个进程,进程是在内存里的,所以用编辑器写的的内容也就、都是存在内存里的,断电之后数据就会丢失。
2.保存之后,编辑器就会把内存的数据刷在硬盘上。
3.我们平时在写py文件的时候,跟编写其他文件没有任何区别的,就相当于是在写一个文本一样,就是一堆字符。
三、Python解释器执行py文件的原理
第一阶段:python解释器启动,哔~~ ~~,此时就相当于启动了一个文本编辑器
第二阶段:python解释器就相当于是一个文本编辑器,打开了一个py文件,也就是从硬盘上面把这个文件的文件内容读入到内存中。
第三阶段:python解释器执行刚刚加载到内存中的py文件的代码的时候
四、python解释器与文本编辑的异同
相同点:python解释器是解释执行文件内容的,因而python解释器具备py文件的功能,这一点与文本编辑器一样。
不同点:文本编辑器将文件内容读入内存后,是为了显示或者编辑,根本不期例会python的语法,二python解释器将文件内容读入内存之后,会识别Python语法。
说的好!
但这等于放屁。
五、字符编码的介绍
这个是重头戏,在我开始讲这个之前,给你们一句忠告,搞不懂,就不要搞了,不然真的很痛苦,这个东西好绕好绕的。
5.1什么是字符编码
计算机只认识0和1 是吧。
但是我们平时写的这些字符,计算机是怎么能够读懂的呢,因为他会经过一个过程
- 字符 --------》翻译过程 -------》数字
总而言之,有这么一套固定的标准,大家都去遵守它,它能实现人类字符和数字的对应关系,我们称它为无限原石
不好意思,出戏了。
我们称它为 字符编码表
5.2涉及到字符编码的两个场景
1.一个python文件中的内容是一对字符组成的,存取均涉及到字符编码问题。
2.python中的数据类型字符串是有一串字符组成的。
5.3字符编码发展史与分类
这个长话短说,就是每个国家都有自己的语言啊,这时候问题出现了,精通18国语言的小周同学谦虚的用8国语言写了一篇文档,那么这篇文档,按照哪国的标准,都会出现乱码(因为此刻的各种标准都只是规定了自己国家的文字在内的字符跟数字的对应关系,如果单纯采用一种国家的编码格式,那么其余国家语言的文字在解析时就会出现乱码)。所以迫切需要一个世界的标准(能包含全世界的语言)于是Unicode应运而生(韩国人表示不服,然后没有什么卵用)。你要怎么自己国家的字符能够在别人国家的电脑上翻译成他们国家的字符呢,这个到了最后,发明了一种叫做Unicode的字符编码,他能够识别万国语言。就是现在全世界的电脑内存都用Unicode了,就是世界标准。
尼克弗瑞曾经说过,世界上没什么东西是永恒的,除了麻烦。
乱码的问题解决了,又来了新问题,Unicode比别的要跟占内存。本着节约精神哦,又出现了天屎,UTF-8应运而生,别问,问就是不知道,他就是把你内存减少了,再问打死你,这是为了你好。
我用一张表格让你们看看就行了
字符 | ASCII | Unicode | UTF-8 |
---|---|---|---|
A | 01000001 | 00000000 01000001 | 01000001 |
中 | x | 01001110 00101101 | 11100100 10111000 10101101 |
5.4为什么内存不用UTF-8
因为历史遗留问题。因为现在还存在很多别的国家的文件需要用Unicode来转换,但是UTF-8代替Unicode编码是大势所趋,在以后会实现。
5.5乱码分析
首先明确概念
- 文件从内存刷到硬盘的操作简称存文件
- 文件从硬盘读到内存的操作简称读文件
乱码的两种情况:
- 乱码一:存文件时就已经乱码
存文件时,由于文件内有各个国家的文字,我们单以shiftjis去存,
本质上其他国家的文字由于在shiftjis中没有找到对应关系而导致存储失败。但当我们硬要存的时候,编辑并不会报错(难道你的编码错误,编辑器这个软件就跟着崩溃了吗???),但毫无疑问,不能存而硬存,肯定是瞎几把存了,即存文件阶段就已经发生乱码,而当我们用shiftjis打开文件时,日文可以正常显示,而中文则乱码了。
- 乱码二:存文件时不乱码而读文件时乱码
存文件时用utf-8编码,保证兼容万国,不会乱码,而读文件时选择了错误的解码方式,比如gbk,则在读阶段发生乱码,读阶段发生乱码是可以解决的,选对正确的解码方式就ok了。
六、总结
一句话
保证不乱码的核心法则就是,字符按照什么字符编码去存的,就用什么字符编码去取。
打住,看到这句话就可以了,别再去想了,再去想你就会自杀了
python2和python3字符编码的区别
一、字符编码应用之python
1.1执行python程序的三个阶段
阶段一:启动python解释器
阶段二:Python解释器此时就是一个文本编辑器,负责打开文件test.py,即从硬盘中读取test.py的内容到内存中
此时,Python解释器会读取test.py的第一行内容,#coding:utf-8
或#-*-coding:utf-8-*-
,以此决定以什么编码格式将代码读入内存,这一行就是设定Python解释器这个软件使用的编码格式。
可以用sys.getdefaultencoding()查看,如果不在Python文件指定头信息#-*-coding:utf-8-*-
,那就使用Python默认的编码格式。
阶段三:读取已经加载到内存的代码(Unicode编码格式),然后执行,执行过程中可能会开辟新的内存空间,比如name="nick"
python2里面默认使用ascii,python3使用的是UTF-8
Python2与python3字符类型的区别
在Python2中有两种字符串类型str和Unicode。
Python3中str都是Unicode编码的,所以Python3中的str类型的数据可以编码成其他字符编码的格式,编码的结果为bytes类型。
这一块先放着,我本人也不是很理解。
文件的三中打开模式
我恨字符编码
文件操作的基础模式有三种(默认的操作模式为r模式):
- r模式为read
- w模式为write
- a模式为append
文件读写内容的格式有两种(默认的读写内容的模式为b模式):
- t模式为text
- b模式为bytes
需要注意的是:t、b这两种模式均不能单独使用,都需要与r/w/a之一连用。
这些不重要,只要你学会了with open,这些都是弟弟
with管理文件操作上下文
一、with管理文件操作上下文
直接上代码
with open('32.txt', 'rt', encoding='utf8') as f:
print(f.read())
sdf
with open()方法不仅提供自动释放操作系统占用的方法,并且with open可以使用逗号分隔,一次性打开多个文件,实现文件的快速拷贝。
with open('32.txt', 'rb') as fr, \
open('35r.txt', 'wb') as fw:
f.write(f.read())
with open就是说,你只管打开文件就好了,关闭的事情自然会有克里斯帮你做。
虽然现在的内存已经很大了,不在意这点,在意这点的时代那时候计算机只有4kb。。。