2

atC#のコマンドでアラビア語のSMSを送信するにはどうすればよいですか?アラビア語のメッセージを送信すると、間違った文字が表示されます。

私はこのコードを使ってみました:

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文字列を16進数に変換する必要があるようです。

http://www.smssolutions.net/tutorials/gsm/sendsmsat/から:

UnicodeSMSメッセージの送信

一部のモデムには、PDUをエンコードせずにUnicodeまたはUCS2メッセージを送信する機能もあります。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コマンドの4番目のパラメーターを「8」に変更します。AT+CSMP= 1,167,0,8

これで、モデムはメッセージをUnicodeとして送信する準備ができました。今が実際のメッセージを送信するときです:AT + CMGS = "+ 31638740161"

上記の電話番号をご自分の携帯電話番号に置き換えてください。モデムは次のように応答します:>

自分でプログラムする必要があるのは、Unicode文字列を次のような16進文字列に変換する単純なルーチンだけです。

アラビア語で「こんにちは」は次のように変換されます:「06450631062D06280627」

この16進文字列をモデムに送信できます:06450631062D06280627

数秒後、モデムはメッセージのメッセージIDで応答し、メッセージが正しく送信されたことを示します。+ CMGS:63

メッセージはまもなく携帯電話に届きます。

于 2010-11-22T18:07:06.240 に答える
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」は「مرحبا」の Hex 形式です!

于 2013-03-16T15:38:04.493 に答える
1

http://www.smssolutions.net/tutorials/gsm/sendsmsat/の記事に従ってペルシャ語で SMS を送信しようとしまし たが、とても簡単でした。これは私の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 に答える