python3.2的bytes和str数据拼接
来源:互联网 发布:大数据培训学校 编辑:程序博客网 时间:2024/05/17 06:18
最近看到一个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 formatf = 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 formatf = 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进行操作。
错误原因:该行未对齐。
0 0
- python3.2的bytes和str数据拼接
- python3 bytes、str的区别
- Python3中的bytes和str类型
- 浅析Python3中的bytes和str类型
- 浅析Python3中的bytes和str类型
- Python3的bytes/str之别
- Python3的bytes/str之别
- Python3中 bytes/str的区别
- Python3的bytes/str之别
- Python菜鸟晋级02----Python3的bytes与str
- Python str和bytes的相互转换
- 关于python2中的unicode和str以及python3中的str和bytes
- python3字符串编码总结-str bytes
- python3字符串编码总结str(unicode)<-->bytes
- Python3中内置类型bytes和str用法及byte和string之间各种编码转换
- bytes和str转换函数
- 了解python中bytes,str和unicode的区别
- 解决python3的pickle.load错误:a bytes-like object is required, not 'str'
- 【JavaScript好学易用系列】JavaScript开篇
- Android实战技巧之二十七:Maven编译开源二维码扫描项目zxing
- relocate and rename datafile 方法、示例
- hdu 2072
- Spring-test做数据库操作的单元测试
- python3.2的bytes和str数据拼接
- 如何给shell脚本传入参数小结
- Winform之学生信息管理系统主页面
- 把日期按照天输出
- HDU1434 幸福列车 【优先队列】
- Git放弃本地更改恢复到资源库版本
- ANDROID SDK体系介绍
- ORACLE9i_性能调优基础十三(Materialized Views)
- 【技巧】android中ListView拉黑解决方法