用于通过 JSON 发送字节数据的 Python 2.x 和 3.x 兼容代码
Posted
技术标签:
【中文标题】用于通过 JSON 发送字节数据的 Python 2.x 和 3.x 兼容代码【英文标题】:Python 2.x and 3.x compatible code for sending byte data over JSON 【发布时间】:2013-10-25 18:33:32 【问题描述】:我有一个 base-64 编码的字符串。
some_s = base64.encodestring(....)
在 Python 2.7 中,我可以将这样的字符串序列化为 JSON (json.dumps)。
在 Python 3.3 中,'some_s' 是一个字节字符串,需要先转换为 'str:
some_s2 = str(some_s2, encoding='ascii')
然后 some_s2 可以序列化为 JSON。
不幸的是,Python 2.7 不接受编码参数作为 str() 调用的一部分。
您将如何在此处编写同时运行 Python 2.7 和 Python 3.3 的转换代码?
【问题讨论】:
为什么有这么多反对票?这似乎是一个合理的问题。 【参考方案1】:您可以检测您的值不是str
类型:
some_s = base64.encodestring(....)
if not isinstance(some_s, str):
some_s = some_s.decode('ascii')
只有在 Python 3 中,some_s
的类型为 bytes
。还要注意.decode()
方法,而不是str(some_s, encoding='ascii')
,它可以在Python 2 和3 中工作。
【讨论】:
啊,是你。这就是你使用愚蠢的“匿名”名字所得到的,你从我这里得到建议。是的,在这种情况下,类型检测是您的最佳选择。以上是关于用于通过 JSON 发送字节数据的 Python 2.x 和 3.x 兼容代码的主要内容,如果未能解决你的问题,请参考以下文章
Python OpenCV 图像到字节字符串以进行 json 传输
Python错误:打印(数据+“\ n”)类型错误:尝试通过网络套接字发送命令时无法将str连接到字节[重复]
使用 Python Twisted 和 Autobahn 从 Matlab 通过 WebSocket 发送 JSON 数据