编码问题,文件上传

编码问题,文件上传
1.文件上传:
    python3:只有两种数据类型 str bytes
    str:unicode
    bytes:16进制类型
    #author: wylkjj
    #date:2019/4/18
    s='asd阿达'
    print(type(s)) #<class 'str'>
    #规则:
    #str>>>>>>bytes:编码
    #第一种编码方式:
    b=bytes(s,'utf8')#utf8规定一个汉字占三个字节
    print(b) #b'asd\xe9\x98\xbf\xe8\xbe\xbe'

    #第二种编码方式:
    b2=s.encode('utf8')
    print(b2) #b'asd\xe9\x98\xbf\xe8\xbe\xbe'
    s3=s.encode('gbk')
    print('gbk编码下的bytes数据:',s3)#b'asd\xb0\xa2\xb4\xef'
    #bytes>>>>>>str:解码
    # b3=str(b2,'gbk')
    # print(b3) #asd闃胯揪 乱码

    #解码方法1:
    b3=str(b2,'utf8')#b2为bytes类型
    print(b3) #asd阿达
    #解码方法2:
    b4=b2.decode('utf8')
    print(b4) #asd阿达
    s4=b2.decode('gbk')#系统默认调用windows的shell,而windows默认的编码形式是utf8
    print(s4) #asd闃胯揪
2.文件上传:
    #author: wylkjj
    #date:2019/4/20
    #服务端
    import subprocess
    import socket
    import os
    sk=socket.socket()
    address=('127.0.0.1',8000)
    sk.bind(address)
    sk.listen(2)
    print('waiting')
    BASE_DIR=os.path.dirname(os.path.abspath(__file__))
    while 1:
        conn,addr=sk.accept()
        while 1:
            data=conn.recv(1024)
            cmd,file_name,file_size=str(data,'utf8').split('|')
            path=os.path.join(BASE_DIR,'eric',file_name)
            file_size=int(file_size)
            has_reciver=0
            with open(path,'ab') as f: #a操作是在文件最后面添加内容
                data=conn.recv(1024)
                f.write(data)
                has_reciver+=len(data)
    sk.close()

    #author: wylkjj
    #date:2019/4/20
    #客户端
    import subprocess
    import socket
    import os
    sk=socket.socket()
    address=('127.0.0.1',8000)
    sk.connect(address)
    BASE_DIR=os.path.dirname(os.path.abspath(__file__))#获取路径
    while True:
        inp = input('>>>').strip()#post|11.png(相对路径)
        cmd,path=inp.split('|')
        path=os.path.join(BASE_DIR,path)
        file_name=os.path.basename(path)#取文件名字
        file_size=os.stat(path).st_size#获取文件大小
        file_info='post|%s|%s'%(file_name,file_size)
        sk.sendall(bytes(file_info,'utf8'))#编码
        with open(path,'rb') as f:#操作r后面加b的作用是模拟文件格式等信息
            data = f.read(1024)  # 定义读取大小
            has_sent=0
            while has_sent!=file_size:
                sk.sendall(data)
                has_sent += len(data)
            print('上传成功')
    sk.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值