C# 发送Unicode文本消息SMS/Arduino
我什么都试过了,在这个过程中我已经筋疲力尽了。 我可以发送正常的短信没有问题 我正在设置消息发送时需要设置的所有内容C# 发送Unicode文本消息SMS/Arduino,c#,c++,arduino,sms,gsm,C#,C++,Arduino,Sms,Gsm,我什么都试过了,在这个过程中我已经筋疲力尽了。 我可以发送正常的短信没有问题 我正在设置消息发送时需要设置的所有内容 if (! sendCheckReply(F("AT+CMGF=1"), ok_reply)) return false; if (! sendCheckReply(F("AT+CSCS=\"UCS2\""), ok_reply)) return false; if (! sendCheckReply(F("AT+CSMP=17,168,0,8"), ok_reply)) ret
if (! sendCheckReply(F("AT+CMGF=1"), ok_reply)) return false;
if (! sendCheckReply(F("AT+CSCS=\"UCS2\""), ok_reply)) return false;
if (! sendCheckReply(F("AT+CSMP=17,168,0,8"), ok_reply)) return false;
我正确地编码了我的Unicode字符,但是我的fona是这样的:
+ Response: +OK SEND NUMBER
+ Response:
+ Sending: 6616634660
+ Response: +OK SEND MESSAGE
+ Response:
+ Sending: 005B004E00450058002000560041004C00450054005D00200053004D005300200073006500720076006500720020006900730020006E006F0077002000720075006E006E0069006E0067002E
+ Response: AT+CMGF=1
+ Response: OK
+ Response: AT+CSCS="UCS2"
+ Response: OK
+ Response:
+ Response: AT+CSMP=17,168,0,8
+ Response: OK
+ Response: AT+CMGS="6616634660"
+ Response:
+ Response: ERROR
+ Response: -ERROR Failed sending message
+ Response: +OK READY FOR NEXT COMMAND
+ Response:
一旦AT+CMGS被发送,它就会出错。
即使我以UCS2十六进制格式提供电话号码,它也会做同样的事情
我假设格式/编码不符合预期
这是Unicode编码(从另一个Stackoverflow post解决方案中提取)
当我取出所有unicode内容时,将CSMP设置回17167,0,0
短信工作(仅限文本)
我猜CSMP的设置是不正确的,但我只是在黑暗中扔扳手在这一点上。。。有人能帮忙吗?您的代码是直接与GSM设备通信,还是Arduino正在这样做?在后一种情况下,Atmega/Arduino上的软件是否能够处理Unicode字符串,而不限于(以零结尾的)单字节字符串?此外,问题中的代码示例缺少关键代码段,在该代码段中,您实际将AT+CMGS命令(包括任何Unicode转换…)C#代码通过其fona软件传输给Arduino;Arduino屏蔽上的软件完全支持UCS2。询问“AT+CSCS”可以确认后者。因此,对“AT+CSCS”命令的响应不是来自实际的GSM设备,而是来自Arduino?有两个软件。。。。C#系统将消息排队并发送到Arduino运行的fona。。。以及fona软件,该软件直接与GSM设备通信。所有AT+。。。命令是直接发送到GSM设备的问题(来自fona/arduino),用于更直接地回答您的问题。。。。每个AT响应都直接来自GSM调制解调器。
Public Function UnicodeStr2HexStr(strMessage As [String]) As [String]
Dim ba As Byte() = Encoding.BigEndianUnicode.GetBytes(strMessage)
Dim strHex As [String] = BitConverter.ToString(ba)
strHex = strHex.Replace("-", "")
Return strHex
End Function
Public Function HexStr2UnicodeStr(strHex As [String]) As [String]
Dim ba As Byte() = HexStr2HexBytes(strHex)
Return HexBytes2UnicodeStr(ba)
End Function
'================> Used to decoding GSM UCS2 message
Public Function HexBytes2UnicodeStr(ba As Byte()) As [String]
Dim strMessage = Encoding.BigEndianUnicode.GetString(ba, 0, ba.Length)
Return strMessage
End Function
Public Function HexStr2HexBytes(strHex As [String]) As Byte()
strHex = strHex.Replace(" ", "")
Dim nNumberChars As Integer = strHex.Length / 2
Dim aBytes As Byte() = New Byte(nNumberChars - 1) {}
Using sr = New StringReader(strHex)
For i As Integer = 0 To nNumberChars - 1
aBytes(i) = Convert.ToByte(New [String](New Char(1) {Chr(sr.Read()), Chr(sr.Read())}), 16)
Next
End Using
Return aBytes
End Function