字符编码
二进制和字符之间的转换过程 --> 字符编码
ascii,gbk,shit,fuck 每个国家都有自己的编码方式
美国电脑内存中的编码方式为ascii ; 中国电脑内存中的编码方式为gbk , 美国电脑无法识别中国电脑写的程序 , 中国电脑无法识别美国电脑写的程序
现在硬盘中躺着 ascii/gbk/shit/fuck 编码的文件, 他们的编码格式已经无法修改了, 所以内存中出现unicode编码, 内存中的unicode编码方式可以识别 ascii/gbk/shit/fuck 编码的文件
用unicode编码方式运行了 ascii/gbk/shit/fuck 编码的文件, 最后还是要装入硬盘, 装入硬盘早期用unicode存进去,但是 他在识别ascii的时候, 会把8位数字转换成16位数字存入硬盘, 浪费空间, 所以出现了utf8(与unicode对应,并且压缩unicode编码的字符)
utf8 能识别其他国家的编码,只识别unicode, utf8目前还不能放在内存,. 但是现在写的代码都是utf8, 历史遗留ascii/gbk/shit/fuck 编码的文件迟早消失/淘汰,要么被转换成utf8格式.所以迟早有一天内存中也是utf8.
Python2和3字符编码的区别
- 打开python解释器
- python解释器相当于文本编辑器,读取二进制转化为普通字符 a = 1
- 对转化后的普通字符进行解释(定义变量就要新开辟内存空间存放变量)
python2
用文件指定的编码方式存储定义后的变量
如果文件指定编码为'gbk' ,那就会以gbk的形式存储变量, 本来打印的是0和1,但是终端会自动对你的0和1安装终端默认的编码转换成字符 ,如果终端的默认编码是utf8 ,乱码; 如果终端默认编码是gbk,不乱吗
如果定义变量前加上u,coding:xxx不会对他造成任何影响, 因为会用unicode编码存储变量, 终端是任何类型的编码都可以识别
python3
用unicode编码方式存储定义后的变量
以后写文件以什么格式存储,就以什么格式读取
文件的三种打开方式
r : 只读
f.read()
w: 清空后写入(文件不存在自动创建)
f.write()
a: 追加(文件不存在自动创建)
f.write()
文本模式:t
二进制模式:b
t/b无法单独使用,只能和r/w/a一起使用
with管理文件上下文
with open() as f: # 自动关闭
pyinstaller的使用
pip instlal pyinstaller
切换路径到文件夹(文件夹包含img.ico和test.py这两个文件)
pyinstaller -i img.ico -F test.py