我使用一些SIMCOM GSM模块接收传入的消息。当我从手机发送短信时,我看到了正常的号码:
+CMT: "+38012345678", ...
但是当短信来自我的手机运营商,或者某些名为短信的服务作为谷歌时,我看到像Google这样的垃圾:
+CMT: "16p6p6w237562767963656", ...
再来一次:
+CMT: "w49511#495946535451425", ...
以及更多:
+CMT: "#497966737471627", ...
根据模块文档,此参数名为<oa>
,表示GSM 03.40 TP-Originating-Address Address-Value字符串字段。
是否可以在任何编程语言上对其进行解码,例如:来自python?它能是什么?如果我切换到UCS2并从它解码完全相同。
答案 0 :(得分:1)
在接收短信时,您确定您的模块设置为文本格式(AT + CMGF = 1)吗?如果您关闭了模块并再次打开它可能会被设置为&#34; PDU&#34;模式,比人类更适合计算机..
有关详细信息,请参阅SIMCOM AT Command手册,它非常广泛(380页pdf)。
答案 1 :(得分:1)
根据SIM800系列AT命令手册v1.10,第114页:
GSM 03.40 TP-目的地址地址-值字段(字符串) 格式; BCD数字(或GSM默认字母字符)被转换 到当前所选TE字符集的字符(请参阅 3GPP TS 27.007中的Command + CSCS);
给出的地址类型
如果CMT消息中的电话号码不是以“ +”号开头,则将使用BCD号码进行编码。
我试图将这些数字与ASCII表进行比较。这不完全是BCD编码,但是看起来非常相似。
要解码“ 16p6p6w237562767963656”,请分成两对:16 p6 p6 w2 37 56 27 67 96 36 56
然后反转每对:61 6p 6p 2w 73 65 72 76 69 63 65
现在与ASCII表中的HEX代码进行比较,并得到结果:all services
。您可能想知道如何阅读6p 6p 2w
。我也不知道!
在搜索了编码数字的其他示例之后,我假设十六进制数字0,A-F具有等效的不同字符:
0 - w
A
B - #
C - p
D
E - +
F - @
我不知道为什么将十六进制数字替换为随机字母。
"w49511#495946535451425"
代表"@Y?KYIVSTAR"
。代码"11"
无法打印,并由"?"
代替。
"#497966737471627"
代表"Kyivstar"
。