【问题标题】:SIM800 receive SMS encoding issueSIM800接收短信编码问题
【发布时间】:2020-05-22 07:04:18
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: encoding sms sim800


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2018-01-13
        • 2020-11-14
        • 1970-01-01
        • 2016-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多