您的位置:首页 > 编程语言 > Python开发

python3.2的bytes和str数据拼接

2015-04-26 13:44 225 查看
最近看到一个python的socket编程编码问题,就研究一下python socket编程。直接拷贝网上示例,发现:python平台2.X可以运行,python3.X居然运行不通过。网上搜索到原因:Python 3最对文本和二进制数据作了更为清晰的区分。“文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰。你不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然)。”问题描述
以下红色部分的代码:f.read的结果是二进制数据,在python3.x中不能直接和str字符串连接。
# Read picture, put into HTTP format
f = open(r'F:\python-s\helloworld\test.jpg','rb')
pic_content = '''
HTTP/1.x 200 OK
Content-Type: image/jpg

'''
pic_content = pic_content + f.read()
f.close()
解决方法
全转二进制流:
pic_content = bytes(pic_content,'utf-8') + f.read()。客户端成功解析出图片。成功。
此处不考虑全转字符串:
因为:pic_content = pic_content + str(f.read())
得到的pic_content是一个分离的字符串(http头和image内容分离了),客户端解析不出。失败。
p.s. 记录一下遇到的问题:错误一:TypeError: Can't convert 'bytes' object to str implicitly  
# Read picture, put into HTTP format
f = open(r'F:\python-s\helloworld\test.jpg','rb')
pic_content = '''
HTTP/1.x 200 OK
Content-Type: image/jpg

'''
pic_content = pic_content + f.read()
f.close()
错误原因:不能直接拼接字符串和二进制流错误二:TypeError: Type str doesn't support the buffer API
request=conn.recv(1024)
method=request.split(' ')[0]
错误原因:recv函数结果需要转码。添加request = request.decode('utf-8')再对request进行操作。
错误三:IndentationError: unexpected indent错误原因:该行未对齐。
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: