python3.2的bytes和str数据拼接

本文探讨了Python 3.x中的socket编程遇到的编码问题,重点在于Python 3对文本(str)和二进制数据(bytes)的明确区分。在Python 3中,由于不能直接混合使用str和bytes,导致了如TypeError: Can't convert 'bytes' object to str implicitly的错误。文章记录了解决此类问题的要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近看到一个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

错误原因:该行未对齐。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值