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": "u5f20u4e09"}

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则没有这样的问题

 

暂时想起来这么多,有的遇到了,查完也就忘了。如果以后遇到还会补充,也希望大神留言告知其他的方面

原文地址:https://www.cnblogs.com/guo970910/p/10027382.html