binascii.unhexlify 在 Python 3.2 和 Python3.4 中的工作方式不同?
binascii.unhexlify working differently in Python 3.2 and Python3.4?
我以前在Linux Mint
上工作,嵌入其中的Python 3
最新版本是Python 3.4
。我的程序将一个十六进制字符串作为输入,对其进行解码并创建一个 bytearray
,这样我就可以使用 struct.unpack
解码多个信息。例如:
hex_str = "00000E0C180E180FEABF070030313564336332363338303431653039004A62004A62006A62406A622E636F6D00"
s = binascii.unhexlify(hex_str)
print(s) # Would print b'\x00\x00\x0e\x0c\x18\x0e\x18\x0f\xea\xbf\x07\x00015d3c2638041e09\x00Jb\x00Jb\x00jb@jb.com\x00'
data = bytearray(s)
date_data = data[:9]
form_date = get_date(date_data) # Get the date using a bunch of struct.unpack
print(form_date) # Would print '2014-12-24 14:24:15'
上周我的电脑坏了,所以我不得不组装一台新机器。我决定尝试 Debian Wheezy
。但是,我发现 Python
的唯一版本是 Python 2.7
。我使用 apt-get
安装了 Python 3
,但我注意到安装的版本只有 Python 3.2
。当我运行与上面完全相同的代码时,我在 binascii.unhexlify
行上得到一个 TypeError
:
hex_str = "00000E0C180E180FEABF070030313564336332363338303431653039004A62004A62006A62406A622E636F6D00"
s = binascii.unhexlify(hex_str)
# TypeError: 'NavigableString' does not support the buffer interface
我不明白这个错误,这是什么意思?
我检查了 Google 但找不到任何东西:两个版本之间 binascii.unhexlify
有什么变化吗?我必须在 3.2 中更改某些内容吗?
我真的不知道如何解决这个问题...也许有更好的方法来实现它?
谢谢。
PS:我可以返回 Linux Mint
,或在 Debian
上安装 Python 3.4
,但我认为我的生产服务器是 Debian
的全新安装,所以使用 Python 3.2
... 所以我最好以该版本为目标(很高兴我现在发现了它!)。
是的,版本之间的行为发生了变化。来自 binascii
module documentation:
Note: a2b_*
functions accept Unicode strings containing only ASCII characters. Other functions only accept bytes-like objects (such as bytes
, bytearray
and other objects that support the buffer protocol).
Changed in version 3.3: ASCII-only unicode strings are now accepted by the a2b_*
functions.
所以如果你想定位 Python <3.3,你需要传入 bytes
或 bytearray
对象而不是字符串。
我以前在Linux Mint
上工作,嵌入其中的Python 3
最新版本是Python 3.4
。我的程序将一个十六进制字符串作为输入,对其进行解码并创建一个 bytearray
,这样我就可以使用 struct.unpack
解码多个信息。例如:
hex_str = "00000E0C180E180FEABF070030313564336332363338303431653039004A62004A62006A62406A622E636F6D00"
s = binascii.unhexlify(hex_str)
print(s) # Would print b'\x00\x00\x0e\x0c\x18\x0e\x18\x0f\xea\xbf\x07\x00015d3c2638041e09\x00Jb\x00Jb\x00jb@jb.com\x00'
data = bytearray(s)
date_data = data[:9]
form_date = get_date(date_data) # Get the date using a bunch of struct.unpack
print(form_date) # Would print '2014-12-24 14:24:15'
上周我的电脑坏了,所以我不得不组装一台新机器。我决定尝试 Debian Wheezy
。但是,我发现 Python
的唯一版本是 Python 2.7
。我使用 apt-get
安装了 Python 3
,但我注意到安装的版本只有 Python 3.2
。当我运行与上面完全相同的代码时,我在 binascii.unhexlify
行上得到一个 TypeError
:
hex_str = "00000E0C180E180FEABF070030313564336332363338303431653039004A62004A62006A62406A622E636F6D00"
s = binascii.unhexlify(hex_str)
# TypeError: 'NavigableString' does not support the buffer interface
我不明白这个错误,这是什么意思?
我检查了 Google 但找不到任何东西:两个版本之间 binascii.unhexlify
有什么变化吗?我必须在 3.2 中更改某些内容吗?
我真的不知道如何解决这个问题...也许有更好的方法来实现它?
谢谢。
PS:我可以返回 Linux Mint
,或在 Debian
上安装 Python 3.4
,但我认为我的生产服务器是 Debian
的全新安装,所以使用 Python 3.2
... 所以我最好以该版本为目标(很高兴我现在发现了它!)。
是的,版本之间的行为发生了变化。来自 binascii
module documentation:
Note:
a2b_*
functions accept Unicode strings containing only ASCII characters. Other functions only accept bytes-like objects (such asbytes
,bytearray
and other objects that support the buffer protocol).Changed in version 3.3: ASCII-only unicode strings are now accepted by the
a2b_*
functions.
所以如果你想定位 Python <3.3,你需要传入 bytes
或 bytearray
对象而不是字符串。