今天有一客户跟我反应,前几天购买的一个4G LTE MODEM短信设备插入的是电信卡发送中文失败的问题一直没找到问题所在偶尔有时有些。插移动联通卡是可以正常使用的因为使用的是PDU模式发送,程序是自己写的,源码原子于网上的一个简单的例子java开发包例子使用的是text模式发送短信的源码smsjava。
经过排查监听客户的软件发现编码大小写的问题。SIMCOM7600CE模块不支持小写,只能用大写编码内容,小写传输给模块会返回错误+CMS ERROR: ME failure的错误
下面是捕抓到主要指令及数据进行对比
失败的数据:
AT+CMGF=1 .OK AT+CSMP=17,167,2,25 .OK AT+CSCS="UCS2" .OK AT+CMGS="00310035003100310038003100330031003400390034" .> 621167094e007b507684613f671b. +CMS ERROR: ME failure
发送成功的数据:
AT+CMGF=1 .OK AT+CSMP=17,167,2,25 .OK AT+CSCS="UCS2" .OK AT+CMGS="00310035003100310038003100330031003400390034" .> 621167094E007B507684613F671B. +CMGS: 131
对比不同地方
失败的内容“621167094e007b507684613f671b”
成功的内容“621167094E007B507684613F671B”
注意看只是字母大小写的问题,一般程序代码直接中文转换成U码后是小写的
最后解决方法是给提交给串口的短信内容字符串用toUpperCase() 方法转成大写后提交。
题外话,另外电信卡发送中文短信也可以用PDU编码,不过是要符合3GPP2协议的PDU编码跟GSM的PDU不一样,PDU是可以支持长短信哦只是比较复杂,TEXT模式简单但不支持长短信,有兴趣的朋友可以自己了解这个文章下《CDMA PDU 编解码补充解析》