首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在c#中用at-command发送阿拉伯语短信

如何在c#中用at-command发送阿拉伯语短信
EN

Stack Overflow用户
提问于 2010-11-23 02:01:22
回答 5查看 12.4K关注 0票数 2

如何在C#中使用at命令发送阿拉伯语短信?当我发送阿拉伯语消息时,它显示错误的字符。

我尝试使用以下代码:

代码语言:javascript
复制
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。

EN

回答 5

Stack Overflow用户

发布于 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

消息很快就会传到手机上。

票数 2
EN

Stack Overflow用户

发布于 2013-03-16 23:38:04

我在Unicodes (波斯语或阿拉伯语消息)中也遇到过类似的问题。请在this thread中查看我的问题和答案。在此线程中,您可以了解如何正确发送Unicode消息,您的问题将得到解决。

请先阅读this article,然后将您的Unicode消息转换为十六进制格式并设置AT+CSCS="UCS2"。代码的核心应该如下所示:

代码语言:javascript
复制
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“是"مرحبا”的十六进制格式!

票数 2
EN

Stack Overflow用户

发布于 2014-06-01 04:48:59

我试着用波斯语发送短信,根据这篇文章:http://www.smssolutions.net/tutorials/gsm/sendsmsat/,它是如此简单。这是我在c#中的代码:

代码语言:javascript
复制
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 seconds

ExecCommand是一个例程,它向串行端口发送命令,等待从端口获得应答。

米拉

代码语言:javascript
复制
    public static string Str2Hex(string strMessage)
    {
        byte[] ba = Encoding.BigEndianUnicode.GetBytes(strMessage);
        string strHex = BitConverter.ToString(ba);
        strHex = strHex.Replace("-", "");
        return strHex;
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4248597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档