我使用的AT命令开发GSM调制解调器在C#.NET应用程序(d-Link的DWM-156)。 我有发送Unicode消息(如书面波斯语或阿拉伯消息)的问题。 这是我的计划的核心:
SerialPort GSMPort = new SerialPort();
GSMPort.PortName = "COM6";
GSMPort.BaudRate = 9600;
GSMPort.Parity = Parity.None;
GSMPort.DataBits = 8;
GSMPort.StopBits = StopBits.One;
GSMPort.Handshake = HandShake.RequestToSend;
GSMPort.DtrEnable = true;
GSMPort.RtsEnable = true;
GSMPort.Open();
GSMPort.Write("AT\r");
Thread.Sleep(1000);
GSMPort.Write("AT+CMGF=1\r");
Thread.Sleep(1000);
GSMPort.Write("AT+CMGS=\"" + destinationNumber + "\"\r\n");
Thread.Sleep(1000);
GSMPort.Write(shortMessage+ "\x1A");
它工作正常的英语和ASCII字母。 我已阅读这篇文章 ,并且可以使用AT命令在超级终端发送Unicode消息:
AT [Enter]
OK
AT+CSCS="UCS2" or AT+CSCS="HEX" [Enter] ---> We have to convert our message to hex
OK
AT+CMGF=1 [Enter]
OK
AT+CMGS="destinationNumber" [Enter]
> 0633064406270645002006450631062D06280627 ---> The hex format of our message (سلام مرحبا)
+CMGS: 139
OK
由于该命令工作正常,我已经加入GSMPort.Write("AT+CSCS=\"UCS2\"\r");
我的应用程序,并试图发送0645 0631 0628 062D 0627(مرحبا)或0633 0644 0627 0645(سلام)。
GSMPort.Write("AT\r");
Thread.Sleep(1000);
GSMPort.Write("AT+CSCS=\"UCS2\"\r");
Thread.Sleep(1000);
GSMPort.Write("AT+CMGF=1\r");
Thread.Sleep(1000);
GSMPort.Write("AT+CMGS=\"" + destinationNumber + "\"\r\n");
Thread.Sleep(1000);
GSMPort.Write("0633064406270645" + "\x1A");
但是,与AT超级终端的命令,目的不接收正确的字母。 什么是C#中的代码和超级终端代码命令它们之间的区别? 如果你帮我解决这个问题,我会升值。
其他信息:你知道我有没有问题,通过超级终端发送Unicode消息(如波斯字母),并使用AT命令。 在下面的代码我尝试发送سلام,而“0633064406270645”是它的十六进制形式。 但我收到□□□□在我的手机上。
GSMPort.Encoding = UnicodeEncoding.GetEncoding(1256);
GSMPort.Write("AT\r");
Thread.Sleep(1000);
GSMPort.Write("AT+CSCS=\"UCS2\"\r");
Thread.Sleep(1000);
GSMPort.Write("AT+CMGF=1\r");
Thread.Sleep(1000);
GSMPort.Write("AT+CMGS=\"" + destinationNumber + "\"\r\n");
Thread.Sleep(1000);
GSMPort.Write("0633064406270645" + "\x1A");
在超级终端环境,在另一方面,一切都很好,我收到سلام。
AT [Enter]
OK
AT+CSCS="UCS2"
OK
AT+CMGF=1 [Enter]
OK
AT+CMGS="destinationNumber" [Enter]
> 0633064406270645 [Ctrl+Z]
+CMGS: 139
OK
我注意到,在超级终端属性,如果我选中“发送行结束与换行符”(这是在属性 - >设置 - > ASCII设置,请检查下面的图片),我也会有同样的问题,因为我有C#代码。 我认为,在启用“饲料与线发送行结束” GSMPort.Write
默认? 如果是的话,我怎么可以禁用它?