Ⅰ 储备知识
程序运行与三大核心硬件的关系
cpu 内存 硬盘
文本编辑器读取文件内容的流程
python解释器运行的三个步骤
先启动python解释器
然后python解释器会把文件从硬盘拿到内存中,此时文件的代码没有语法意义
最后解释器会解释刚刚拿到的内存的内存,开始识别语法意义
前两步运用到字符编码器的运用,第三步取出来识别的时候也要用到字符编码器的,以保证识别变量语法的时候不是乱码
Ⅱ 字符编码的介绍
定义:
存:字符===>翻译===>二进制数字
取:字符<===翻译<===而仅是数字
两个过程是正好相反的
Ⅲ 字符编码表
就是一个人类认识的字符与计算机认识的二进制数字的一个对应关系
就是人类与计算机沟通的桥梁
Ⅳ 字符编码表发展史
唯我独尊
由于计算机起源于美国,所以美国佬就没考虑过别的国家还能用得起计算机,但是发明的编码表只有英文字母和英文符号:ASCII表
由于ASCII表只支持英文字符,所以就只使用了一个8位的二进制数对应一个字符
天下大乱
中国人看到美国人有电脑自己也想搞,于是就有了能支持中文和英文的GBK编码表
哎韩国棒子他也想用电脑,于是就有了Euc-Kr表
小日本说我也要用,于是也发明了一个ShidtjIs表
每个能用的起电脑的国家都有了自己的编码表....
这个情况就产生了问题,中国的软件只能在中国使用,每个国家的软件都只能自己国家使用
天下一统
鉴于天下大乱的情况,科学家们组织编写了一个万国码:unicode
unicode可以兼容万国字符,只需存的时候使用相对应的编码与字符
取出来的时候同理,由于软件是放于硬盘中,所以硬盘中的各种传统编码的软件,可以通过nuicode完成转换关系
utf-8 是unicode的升级版本,应为unicode中的英文字符也使用了2到3个byte位来存放,这样就造成了资源浪费
utf-8是针对nuicode的可变长度字符编码:一个英文字符占1个byte位,一个中文字符占3个byte位,生僻字用4个byte位来存储
Ⅴ 字符编码的使用方式
编码 encode
解码 deode
Ⅵ 结论
内存固定使用nuicode编码,我们无法改变,我们可以改变的是内存存如硬盘时采用的格式
Ⅶ 乱码问题
存入乱码
采用的编码表与字符不匹配,所以产生了乱码
解决方案:编码格式与文件中的字符应该相互对应,如果使用了不兼容的编码表进行编码存入,那么就会出现乱码且无法恢复
读取乱码
读取的时候使用的编码表同存入时的编码表不同,无法正确解释
解决方案:确认文件以什么编码格式存储,就应该使用什么编码取出,如果不确定,那么只能一个个的编码实验
python解释器默认编码
python2默认使用ASCII码
python3默认使用utf-8
保证程序运行前两个阶段不乱码的核心法则,在文件第一行进行表示使用哪种编码:# coding:unt-8 用来指定使用哪种编码
字符串类型乱码
python3中的str类型都默认是直接存成unicode编码格式
在字符串前加u可保证文件在python2中的str类型不乱码 x = u'上'
目的是位了将编码格式强制转换成unicode格式
Ⅷ 文件处理
什么是文件
文件是操作系统提供给用户\应用程序操作硬盘的一个虚拟单位
为何要用文件:存取硬盘必须使用文件
如何用文件: f = open(文件路径,打开模式) ; f.write(数据) ; f.close() 关闭文件
文件路径
绝对路径
windows系统
D:\puthon38\doc\python383\python.exe
C:\a\b\c\d.txt
linux系统
/a/b/c/d.txt
file = r'C:\a\b\c\new.txt'#win系统路径
file = r'/a/b/c/d.txt'#linux系统路径
相对路径
c\d.txt #相对于当前文件夹的路径
d.txt
网友评论