编码问题,文件上传
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()
编码问题,文件上传
最新推荐文章于 2021-02-24 08:25:51 发布