今天有一客戶跟我反應(yīng),前幾天購買的一個4G LTE MODEM短信設(shè)備插入的是電信卡發(fā)送中文失敗的問題一直沒找到問題所在偶爾有時有些。插移動聯(lián)通卡是可以正常使用的因為使用的是PDU模式發(fā)送,程序是自己寫的,源碼原子于網(wǎng)上的一個簡單的例子java開發(fā)包例子使用的是text模式發(fā)送短信的源碼smsjava。
經(jīng)過排查監(jiān)聽客戶的軟件發(fā)現(xiàn)編碼大小寫的問題。SIMCOM7600CE模塊不支持小寫,只能用大寫編碼內(nèi)容,小寫傳輸給模塊會返回錯誤+CMS ERROR: ME failure的錯誤
下面是捕抓到主要指令及數(shù)據(jù)進行對比
失敗的數(shù)據(jù):
AT+CMGF=1 .OK AT+CSMP=17,167,2,25 .OK AT+CSCS="UCS2" .OK AT+CMGS="00310035003100310038003100330031003400390034" .> 621167094e007b507684613f671b. +CMS ERROR: ME failure
發(fā)送成功的數(shù)據(jù):
AT+CMGF=1 .OK AT+CSMP=17,167,2,25 .OK AT+CSCS="UCS2" .OK AT+CMGS="00310035003100310038003100330031003400390034" .> 621167094E007B507684613F671B. +CMGS: 131
對比不同地方
失敗的內(nèi)容“621167094e007b507684613f671b”
成功的內(nèi)容“621167094E007B507684613F671B”
注意看只是字母大小寫的問題,一般程序代碼直接中文轉(zhuǎn)換成U碼后是小寫的
最后解決方法是給提交給串口的短信內(nèi)容字符串用toUpperCase() 方法轉(zhuǎn)成大寫后提交。
題外話,另外電信卡發(fā)送中文短信也可以用PDU編碼,不過是要符合3GPP2協(xié)議的PDU編碼跟GSM的PDU不一樣,PDU是可以支持長短信哦只是比較復(fù)雜,TEXT模式簡單但不支持長短信,有興趣的朋友可以自己了解這個文章下《CDMA PDU 編解碼補充解析》