【发布时间】:2012-07-20 11:48:59
【问题描述】:
我知道最简单的方法是使用regular expression,但我想知道是否还有其他方法可以进行此检查。
我为什么需要这个?我正在编写一个从SIM 卡读取短信(SMS)的 Python 脚本。在某些情况下,十六进制消息到达,我需要对其进行一些处理,因此我需要检查接收到的消息是否为十六进制。
当我发送以下短信时:
Hello world!
我的脚本收到
00480065006C006C006F00200077006F0072006C00640021
但在某些情况下,我会收到正常的短信(不是十六进制的)。所以我需要做一个 if hex 控制。
我使用的是 Python 2.6.5。
更新:
这个问题的原因是,(不知何故)我发送的消息被接收为hex,而操作员发送的消息(信息消息和广告。)被接收为普通字符串。所以我决定检查一下,确保我收到的消息是正确的字符串格式。
一些额外的细节:我正在使用华为 3G 调制解调器和PyHumod 从 SIM 卡读取数据。
我的情况可能的最佳解决方案:
处理此类字符串的最佳方法是使用a2b_hex(又名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!'
【问题讨论】:
-
我不认为这个问题看起来很简单,如果你读到“333 445”之类的东西,它可以是电话号码(字符串)或十六进制值,如何你能确定吗?我认为真正的问题是你为什么要同时阅读?
-
@mouad 这本身就是一个问题,但在我的情况下,我不会打扰。
-
顺便说一下,扩展的十六进制代码看起来很像 UCS-2 大端编码。
-
我认为也许正则表达式 wiz(我不是)可以使用 RE 进行检查。