今日总结
今天学习了字符编码,所谓字符编码就是将现实生活中的各种语言通过字符编码这一标准一一对应计算机可以识别的二进制。自从计算机出现以来,就已经出现了字符编码。从之前只能识别英文字符和一些特殊字符的ASCII编码,(一个字符占8个bit也就是一个字节),到可以识别中文和英文的gbk编码(一个字符占16个bit),还有其他可以识别日文与英文的shift_jis编码等等各种形式。但随着世界的发展洪流,显然仅仅只能识别一两种语言显然是远远不够的。于是便有了可以识别万国字符的Unicode编码,Unicode编码可以转换成各国的编码,同时各国的编码也可以装换成Unicode,而utf-8则是对Unicode进行的空间优化。在运行一个py文件时有三个流程,第一是启动python编辑器,将各种源码读入到内存中,第二步就是将硬盘中的py文件里的内容读入到内存中,在这一步并没有对python语法进行检查,而也就是这一步会产生编码问题,编码问题也会出现两种情况,一个是存的时候出现问题,比如使用gbk编码去存日文,很明显会出现乱码,而它的底层原理则是在输入的时候并不会出现问题,输入时想要输入的字符会存入到内存中,存入内存中的只有Unicode编码,也就是将输入的字符转成Unicode存在了内存中,而gbk编码改变的只是在存入硬盘时将内存中的Unicode装换成gbk。在pycharm中可以更改存入的字符编码,假如存的是gbk,在使用python解释器调用py文件时就会出错,因为python解释器默认是使用utf-8进行解码的所以明显使用gbk不可进行解码。第三则是python解释器开始解释读入内存的语句,执行python语法。在这一步同时也会产生乱码问题,在python3中字符串类型保存到内存中使用的是Unicode编码,在python2中字符串类型保存在内存中使用的是默认的Ascii编码,在print()语句中的打印功能是根据编辑器的不同而不相同的,就比如pycharm中的编辑器的默认编码是utf-8,而在windows中默认编码是gbk,所以在使用python2保存字符串时在其前面加上u表示保存为Unicode,对于unicode格式无论丢给任何终端进行打印,都可以直接对应字符不会出现乱码问题。
然后是文件处理操作,文件是操作系统提供给应用程序来操作硬盘的虚拟概念。应用程序运行过程中产生的所有数据都保存在内存当中,要想数据永久保存就必须存在硬盘中才可以。明显硬盘是不可以直接进行操作的,应用程序要想操作系统硬盘必须通过操作系统,用户或应用程序对文件的操作,就是向操作系统进行系统调用,然后通过操作系统对硬盘进行操作。在python中对于文件的操作,open()包含三个参数,一个是文件路径,一个是对文件的操作模式(只读,只写,只追加,是文本文件还是二进制文件) r,w,a,t,b, 还有一个编码格式 。其中对于文件的模式一般都是混合使用的(wt ,rt, at, w+ ,r+, a+),其次则是编码格式,并且编码格式是必须要写的,如果没有指定编码格式那么再打开文件时就会按照操作系统默认的编码格式,对于windows默认是gbk,linux系统默认是utf-8,若在windows系统中的pycharm中使用utf-8格式进行保存文件,如果是保存的是英文是没有任何问题的,但若保存的是中文的话,utf-8没有对应gbk模式的中文,所以会出错,并且不写文件打开时的编码就会出现乱码情况。
然后是文件操作的流程,首先是打开文件,由应用程序像操作系统发出系统调用open(),操作系统打开该文件,对应一块硬盘空间,并返回一个文件对象赋值给一个变量,文件对象占用的是应用程序的内存,第二步是调用文件对象下的读/写方法,会被操作系统转换为读/写硬盘的操作,最后一步则是向操作系统发出关闭文件的请求,以此来回收系统资源。
具体的文件操作代码则要通过具体的题目来进行。
over!! 16:32
2022/7/18
浙公网安备 33010602011771号