2

如何使用atC# 中的命令发送阿拉伯语短信?当我发送阿拉伯语消息时,它显示不正确的字符。

我尝试使用此代码:

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。

4

5 回答 5

2

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

首先请阅读本文,然后将您的 Unicode 消息转换为 Hex 格式并设置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”是“مرحبا”的十六进制格式!

于 2013-03-16T15:38:04.493 回答
2

看起来你必须先将你的 unicode 字符串转换为十六进制。

来自http://www.smssolutions.net/tutorials/gsm/sendsmsat/

发送 Unicode SMS 消息

一些调制解调器还能够发送 Unicode 或 UCS2 消息,而无需对 PDU 进行编码。您可以通过仅将 Unicode 数据转换为 HEX 字符串并将该字符串发送到调制解调器来发送 Unicode 消息。

要检查您的调制解调器是否支持此模式,只需键入以下命令:AT+CSCS=?

此命令显示调制解调器支持的代码页。调制解调器会这样响应: +CSCS: ("GSM","PCCP437","CUSTOM","HEX")

如果此字符串包含“HEX”或“UCS2”,则似乎支持 Unicode。要指定您将使用 HEX 字符串发送消息,请将代码页设置为“HEX”或“UCS2”,具体取决于调制解调器响应。在我们的示例中,我们将调制解调器设置为“HEX”:AT+CSCS="HEX"

接下来,我们必须为 Unicode 消息指定正确的 DCS(数据编码方案),即 0x08。我们可以通过将AT+CSMP命令的第四个参数改为'8'来设置这个值:AT+CSMP=1,167,0,8

调制解调器现在已准备好以 Unicode 格式发送消息。现在是发送实际消息的时候了:AT+CMGS="+31638740161"

将上述电话号码替换为您自己的手机号码。调制解调器将响应: >

您唯一需要自己编程的是一个简单的例程,它将 Unicode 字符串转换为十六进制字符串,如下所示:مرحبا

阿拉伯语中的“Hello”将被转换为:“06450631062D06280627”

您可以将此十六进制字符串发送到调制解调器:06450631062D06280627

几秒钟后,调制解调器将响应消息的消息 ID,表明消息已正确发送:+CMGS: 63

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

于 2010-11-22T18:07:06.240 回答
1

我尝试根据这篇文章以波斯语发送短信: 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 seconds

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

米拉德


    public static string Str2Hex(string strMessage)
    {
        byte[] ba = Encoding.BigEndianUnicode.GetBytes(strMessage);
        string strHex = BitConverter.ToString(ba);
        strHex = strHex.Replace("-", "");
        return strHex;
    }
于 2014-05-31T20:48:58.857 回答
0

看来您应该使用PDU格式。

从这个链接开始!

于 2011-11-29T10:36:24.507 回答
0

这正在发送孟加拉语或任何语言以及 unicode 发送 AT 命令

   SP.Write("AT\r");
    Thread.Sleep(2000);
    progressSending.Value = 40;
    SP.Write("AT+CSCS=HEX\r\n");
    Thread.Sleep(2000);
    progressSending.Value = 50;
    SP.Write("AT+CMGF=1\r\n");
    Thread.Sleep(2000);
    progressSending.Value = 60;
    SP.Write("AT+CSMP=1,173,0,8\r\n");
    Thread.Sleep(2000);
    progressSending.Value = 70;
    SP.Write("AT+CMGS=" + here write receive number + Char.ConvertFromUtf32(13));
    Thread.Sleep(2000);           
    progressSending.Value = 80;                          
    SP.Write(Str2Hex(your stirng value) + "\x1A" + "\r\n");
    Thread.Sleep(2000);
    progressSending.Value = 90;

这是将字符串转换为 HexaDecimal

public static string Str2Hex(string strMessage)
{
    byte[] ba = Encoding.BigEndianUnicode.GetBytes(strMessage);
    string strHex = BitConverter.ToString(ba);
    strHex = strHex.Replace("-", "");
    return strHex;
 }
于 2018-01-20T09:33:02.687 回答