将 python2 字节/字符串编码转换为 python3
Posted
技术标签:
【中文标题】将 python2 字节/字符串编码转换为 python3【英文标题】:Converting python2 byte/string encoding to python3 【发布时间】:2017-10-14 09:04:49 【问题描述】:我正在通过串行端口进行通信,并且当前使用我想转换为 python3 的 python2 代码。我想确保我通过网络发送的字节是相同的,但我无法验证是否是这种情况。
在原始代码中,命令是这样发送的:
serial.Serial().write("\xaa\xb4" + chr(2))
如果我在 python2 中 print "\xaa\xb4"
我得到这个:��.
如果我在 python3 中print("\xaa\xb4")
我得到这个:ª´
编码和解码似乎也相反:
Python2:print "\xaa".decode('latin-1')
-> ª
Python3:print("\xaa".encode('latin-1'))
-> b'\xaa'
粗略地说,我需要在 python3 中发送什么serial.write()
以确保发送完全相同的1
s 和0
s 序列?
【问题讨论】:
【参考方案1】:使用bytes
序列。
ser.write(b'\xaa\xb4')
【讨论】:
但是如果我构造这样的命令:a = '\xaa'
,我将如何将它传递给write()
? print(bytes(a, 'utf8')) -> b'\xc2\xaa'
通常你不会;你首先会使用bytes
。如果由于某种原因您有文本并且需要将前 256 个字符转换为字节,那么您可以使用 latin-1
编解码器。
是的,谢谢。使用b'\xaa'
等进行构建使一切变得更容易。我意识到我的问题在于chr()
和ord()
。以上是关于将 python2 字节/字符串编码转换为 python3的主要内容,如果未能解决你的问题,请参考以下文章
4.python2与python3编码区别,以及字符串与字节的相互转换及其socket编程应用场景
如何在 JavaScript 中使用字节数组将字符串转换为 base64 编码?