【问题标题】:Running USSD command on GSM modem (wrong Encoding maybe)在 GSM 调制解调器上运行 USSD 命令(可能编码错误)
【发布时间】:2015-07-26 15:45:02
【问题描述】:

我正在尝试使用 GSM 调制解调器执行 USSD 命令。

AT+CUSD=1,"*200#",15

我得到的结果是不可读的

"+CUSD: 0,"Æ·ÜNÓu9XŽt�¤å1:,?—u0Œt�ši7è,Óëizy®ƒ5ÓnÔL»Ai7½,w‡éé·;Ì.ÏAòòœvÓËs�ÖL»",15"

当我使用相同的 sim 在手机上尝试相同的 ussd 代码时,我得到了正确的结果,即

"Forfait: 909DA. Recharge:0.0DA Min gratuites: 0Min. Min 国际重演:0分钟”

将字符集 AT+CSCS 从 GSM 更改为 IRA 或 PCCP、PCDN、8859-1 不会改变响应,它是完全相同的响应

将 AT+CSCS 更改为十六进制会给我一个错误:

AT+CSCS="HEX"
AT+CUSD=1,"*200#",15 

OK
+CUSD: 2,"Unexpected Data Value",15
+CUSD: 2,"Unexpected Data Value",15
ERROR

并将其更改为 UCS2 并调用 USSD 使我的调制解调器重新启动

AT+CSCS="UCS2"
AT+CUSD=1,"*200#",15 

【问题讨论】:

  • 这两个 Unexpected Data Value 错误是针对 * # 字符的,因为它们不是十六进制字符。当使用 AT+CSCS 更改字符编码时,它适用于我在回答中提到的 all 字符串。请参阅this answer 以获取启用 UCS2 编码的 UTF-8 设置示例。同样的错误也适用于 UCS2 的第二种情况,尽管重新启动的行为不如打印有用的“意外数据值”错误消息那么好。

标签: gsm at-command modem ussd


【解决方案1】:

AT+CUSD命令在27.007中指定,主动结果码的格式定义为+CUSD: <m>[,<str>,<dcs>]

从您收到的回复中,您可以看到 <m>0<dcs>15 以及 <str> 的乱码,顺便说一下,它不简单地直接映射到 AT+CSCS 字符编码;有一整节专门用于解释它的介绍,您必须进一步研究。

查看 27.007 中引用的 23.038 标准,<dcs> 值 15 映射到 未指定语言,但阅读上面的文本似乎也与 GSM 7 位默认字母表相同 em>。

所以是的,您对编码问题的怀疑是正确的,不幸的是,标准对此不是很直观,您必须深入研究。

为了调试它,我首先设置AT+CSCS="HEX" 并验证接收到的数据在解码时是否有意义,然后努力使其以可用的格式呈现,或者可能自己在软件中从十六进制显式解码(但要请注意,更改AT+CSCS 然后适用于从那时起的所有字符串,包括AT+CSCS<chset> 参数,当您稍后想将编码更改为其他内容时......)

【讨论】:

  • 首先,感谢您提供非常有帮助的回复。我开始认为 , 是加密的,这可能吗?因为我尝试将收到的乱码输入 GSM 7 位解码器,但没有运气。没有找到类似明确信息的内容。
【解决方案2】:

AT+CMGF=0

AT+CSCS=十六进制

AT+CUSD=1,"*123#", 15

获取结果并将ussd pdu转换为文本

python 库: https://pypi.org/project/PDUUSSDConverter/

直接回答。祝你好运

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 2011-09-29
    相关资源
    最近更新 更多