1

我正在尝试设置一个 SIM800 来接收来自我的警报系统的 SMS 消息,并且我让它工作了......几乎。

当我从手机发送 SMS 消息时,SIM800 以可读格式正确接收消息。但是,当报警系统发送短信时,SIM800 会显示一个包含十六进制数字的长字符串,而不是消息。

查看收到的十六进制字符串,我注意到每隔一个数字是 0x00。然后我尝试从字符串中删除额外的 0x00 并通过十六进制到 ascii 转换器运行它,然后我可以正确读取消息。

当我在手机上收到来自警报系统的消息时,它会正确显示,无需任何手动转换。

我在 SIM800 上尝试了 AT+CMGF 命令和 AT+CSCS 命令的不同设置,但似乎没有解决问题。

还有其他需要设置的AT指令吗?

4

2 回答 2

1

SIM800L 在接收时似乎并不总是将传入的消息转换为预期的编码,即根据我的经验,当接收到包含 GSM 字符集之外的字符的 UCS2/UTF-16 编码消息时,它会以 UCS2 形式而不是“GSM " 并且不会转换它,即使编码方案 ( AT+CSCS=?) 设置为"GSM".

我发现以任何源编码接收消息的最可靠方法是使用 将 SIM800L 设置为 UCS2 模式 AT+CSCS="UCS2",然后在接收消息时,将其从 ASCII 十六进制序列转换为字节缓冲区,然后解码为 UTF-16。

即调制解调器将传入消息example通知为006500780061006D0070006C0065。将其转换为字节序列并解码为UTF-16BE.

于 2020-10-19T09:07:22.900 回答
1

有两种 GMS 编码方案,GSM 7 位(您将其视为文本,因为它由 SIM800 为您解码)和 UCS-2,它表示这些两字节字符中最常用的拉丁和东方字符。

UCS-2 编码都与 UTF-16 相同,因此您可以使用它进行解码。您知道这是来自 SIM800 对 +CMGR 响应的“数据编码方案”条目中的 UCS-2 消息。

您可以通过搜索“GSM 03.38 字符编码”了解更多信息。

于 2020-06-07T08:10:28.517 回答