如何在C#中使用at命令发送阿拉伯语短信?当我发送阿拉伯语消息时,它显示错误的字符。
我尝试使用以下代码:
serialPort1.BaseStream.Flush();
string cb = char.ConvertFromUtf32(26);
System.Threading.Thread.Sleep(2000);
this.serialPort1.Write("AT+CMGF=1\r");
this.serialPort1.Write("AT+CSCA=servicecenter\r\n");//Ufone Service Center
this.serialPort1.Write("AT+CSCS=\"" + "HEX" + "\"\r\n");
this.serialPort1.Write("AT+CSMP=\"" + 1 + "," + 167 + "," + 0 + "," +8+ "\"\r\n");
this.serialPort1.Write("AT+CMGS=\"" + textBox1.Text + "\"\r\n");// message sending
this.serialPort1.Write(textBox2.Text + cb);//message text我在文本框中写了06450631062D06280627。
发布于 2010-11-23 02:07:06
看起来你必须先把你的unicode字符串转换成十六进制。
来自http://www.smssolutions.net/tutorials/gsm/sendsmsat/:
发送Unicode SMS消息
某些调制解调器还具有发送Unicode或UCS2消息的能力,而无需对PDU进行编码。只需将Unicode数据转换为十六进制字符串并将此字符串发送到调制解调器,即可发送Unicode消息。
要检查您的调制解调器是否支持此模式,只需键入以下命令: AT+CSCS=?
此命令显示调制解调器支持的代码页。调制解调器的响应如下:+CSCS:("GSM","PCCP437","CUSTOM",“十六进制”)
如果此字符串包含“十六进制”或"UCS2",则似乎支持Unicode。要指定将使用十六进制字符串发送消息,请根据调制解调器的响应将代码页设置为“十六进制”或"UCS2“。在我们的示例中,我们将调制解调器设置为“十六进制”:AT+CSCS=“十六进制”
接下来,我们必须为Unicode消息指定正确的DCS (数据编码方案),即0x08。我们可以通过将AT+CSMP命令的第四个参数更改为‘8’来设置此值: AT+CSMP=1,167,0,8
调制解调器现在已准备好以Unicode格式发送消息。现在是发送实际消息的时候了: AT+CMGS="+31638740161“
将上面的电话号码替换为您自己的手机号码。调制解调器将响应为:>
您唯一需要自己编程的是一个简单的例程,它将Unicode字符串转换为十六进制字符串,如下所示:مرحبا
"06450631062D06280627“
您可以将此十六进制字符串发送到调制解调器: 06450631062D06280627
几秒钟后,调制解调器将使用消息的消息ID进行响应,表示消息已正确发送:+CMGS: 63
消息很快就会传到手机上。
发布于 2013-03-16 23:38:04
我在Unicodes (波斯语或阿拉伯语消息)中也遇到过类似的问题。请在this thread中查看我的问题和答案。在此线程中,您可以了解如何正确发送Unicode消息,您的问题将得到解决。
请先阅读this article,然后将您的Unicode消息转换为十六进制格式并设置AT+CSCS="UCS2"。代码的核心应该如下所示:
GSMPort.Write("AT\n");
Thread.Sleep(1000);
GSMPort.Write("AT+CSCS=\"UCS2\"\n");
Thread.Sleep(1000);
GSMPort.Write("AT+CMGF=1\n");
Thread.Sleep(1000);
GSMPort.Write("AT+CMGS=\"" + destinationNumber + "\"\n");
Thread.Sleep(1000);
GSMPort.Write("06450631062D0628062706450631062D0628062706450631062D06280627" + "\x1A");"06450631062D06280627“是"مرحبا”的十六进制格式!
发布于 2014-06-01 04:48:59
我试着用波斯语发送短信,根据这篇文章:http://www.smssolutions.net/tutorials/gsm/sendsmsat/,它是如此简单。这是我在c#中的代码:
string recievedData = ExecCommand(port, "AT+CSCS=\"HEX\"", 300, "Failed to set message encoding.");
recievedData = ExecCommand(port, "AT+CSMP=1,167,0,8", 300, "Failed to set message format.");
//recievedData = ExecCommand(port, "AT+CMGF=1", 300, "Failed to set message format.");
String command = "AT+CMGS=\"" + Str2Hex(PhoneNo) + "\"";
recievedData = ExecCommand(port, command, 300, "Failed to accept phoneNo");
command = Str2Hex(Message) + char.ConvertFromUtf32(26) + "\r";
recievedData = ExecCommand(port, command, 3000, "Failed to send message"); //3 secondsExecCommand是一个例程,它向串行端口发送命令,等待从端口获得应答。
米拉
public static string Str2Hex(string strMessage)
{
byte[] ba = Encoding.BigEndianUnicode.GetBytes(strMessage);
string strHex = BitConverter.ToString(ba);
strHex = strHex.Replace("-", "");
return strHex;
}https://stackoverflow.com/questions/4248597
复制相似问题