python小结(三) py-2与py-3的偏码真相&&几个调用模块的区别
编码的不同
0x01:
python2.X
1.python2默认的编码的格式是ASCII,所以通常在前面都会声明 coding:utf8
2.按照python2的编码方式会以bytes字节的方式存储的你的硬盘中,而且python2会默认将bytes字节转化为unicode格式
如图所示:
python3.X
1.python3默认的编码格式是utf8
2.python3则将str与bytes的类型做了严格的区分,str就是unicode类型,也是最常用的类型,只有在需要bytes时才会转化为bytes类型
如图所示:
模块的区别
0x02:
1.input
python2.X
inp = raw_input('请输入:')
python3.X
input = input('请输入')
2. json模块:
python2.X
data= {'name':'张三'} data = json.dumps(data,ensure_ascii=False) print data 运行结果: {"name": "张三"} 若没有添加ensure_ascii属性,则 {"name": "\u5f20\u4e09"}
python3.X
data= {'name':'张三'} data = json.dumps(data) print(data) 运行结果: data= {'name':'张三'}
3.configparser
python2.X
import ConfigParser config.add_section('default') config.set('default','name','tom') with open('example', 'w') as f: config.write(f)
python3.X
import configparser config = configparser.ConfigParser() config['deault'] = { '':'', '':'' } with open('example', 'w') as f: config.write(f)
4.socket(以server端为例)
python2.X
发送send(),接受recv(),python2中可以是str或者bytes类型
import socket import SocketServer class MyServer(SocketServer.BaseRequestHandler): def handle(self): print ("服务端启动...") while True: conn = self.request print (self.client_address) while True: client_data=conn.recv(1024) print (client_data) print ("waiting...") server_response = raw_input(">>>") conn.sendall(server_response) conn.close() if __name__ == '__main__': server = SocketServer.ThreadingTCPServer(('127.0.0.1',8090),MyServer) server.serve_forever()
python3.X
只能接受bytes类型的数据
import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self): print ("服务端启动...") while True: conn = self.request print (self.client_address) while True: client_data=conn.recv(1024) print (str(client_data,"utf8")) print ("waiting...") server_response=input(">>>") conn.sendall(bytes(server_response,"utf8")) conn.close() if __name__ == '__main__': server = socketserver.ThreadingTCPServer(('127.0.0.1',8098),MyServer) server.serve_forever()
5.cmd
python2.X
a)cm命令行默认的是gbk格式,当python2在命令行运行汉字会出现乱码或报错
print u'张三'
b)也可以修改cmd的默认格式
1. chcp 65001 ( 将字符格式修改为utf8 )
2. chcp 936 ( 将字符格式修改为默认的gbk)
python3.X
python3则没有这样的问题
暂时想起来这么多,有的遇到了,查完也就忘了。如果以后遇到还会补充,也希望大神留言告知其他的方面