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错误原因:该行未对齐。
相关文章推荐
- python3.5 模拟UDP客户端发送数据报文,报错:TypeError: a bytes-like object is required, not 'str'
- Python pandas 数据框的str列内置的方法详解
- 【Python基础】--Pickle/函数默认参数/函数的参数*args/Bytes<=>str/32-64bit/bytes对象
- 【分享】Python – 了解bytes、str与unicode的区别
- python3 str.encode bytes.decode
- python3 第十一章 - 数据类型之str(字符串)
- Python3中内置类型bytes和str用法及byte和string之间各种编码转换
- python 判断一下下面str_n的数据类型
- python 基础2 编码转换 pycharm 配置 运算符 基本数据类型int str list tupple dict for循环 enumerate序列方法 range和xrange
- Python3中 bytes/str的区别
- Python3中bytes和HexStr之间的转换
- python学习笔记1-数据类型:int,str
- python3中的str和bytes
- python unicode和str拼接的小问题
- <Python初学>基本数据str的操作
- Python3中的bytes和str类型
- python机器学习实战3.2提示错误AttributeError: type object 'str' has no attribute '_name_'
- python str与bytes之间的转换
- python3 bytes、str的区别
- 浅析Python 3 字符串中的 STR 和 Bytes 有什么区别