我知道最简单的方法是使用正则表达式,但我想知道是否还有其他方法可以进行此检查。
为什么我需要这个?我正在编写一个从SIM卡读取短信 (SMS) 的 Python 脚本。在某些情况下,十六进制消息到达,我需要为它们做一些处理,所以我需要检查收到的消息是否是十六进制的。
当我发送以下短信时:
Hello world!
我的脚本收到
00480065006C006C006F00200077006F0072006C00640021
但在某些情况下,我会收到正常的短信(不是十六进制的)。所以我需要做一个if 十六进制控制。
我正在使用 Python 2.6.5。
更新:
该问题的原因是,(不知何故)我发送的消息被接收,hex
而运营商发送的消息(信息消息和广告。)被作为普通字符串接收。所以我决定进行检查并确保我收到的消息是正确的字符串格式。
一些额外的细节:我正在使用华为 3G 调制解调器和PyHumod从 SIM 卡读取数据。
我的情况可能的最佳解决方案:
处理此类字符串的最佳方法是使用a2b_hex
(aka unhexlify
) 和utf-16 big endian encoding
(如@JonasWielicki 所述):
from binascii import unhexlify # unhexlify is another name of a2b_hex
mystr = "00480065006C006C006F00200077006F0072006C00640021"
unhexlify(mystr).encode("utf-16-be")
>> u'Hello world!'