как да изпратите sms на арабски с at-command в c#

Как мога да изпратя SMS на арабски с командата at в C#? Когато изпращам съобщения на арабски, се показват неправилни знаци.

Опитах да използвам този код:

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 в текстовото поле.


person mahdi    schedule 22.11.2010    source източник


Отговори (5)


Изглежда, че първо трябва да преобразувате своите Unicode низове в шестнадесетични.

От http://www.smssolutions.net/tutorials/gsm/sendsmsat/ :

Изпращане на SMS съобщение с Unicode

Някои модеми също имат способността да изпращат Unicode или UCS2 съобщения без кодиране на PDU. Можете да изпращате Unicode съобщения само като конвертирате Unicode данните в HEX низ и изпратите този низ към модема.

За да проверите дали вашият модем поддържа този режим, просто въведете следната команда: AT+CSCS=?

Тази команда показва кодовите страници, поддържани от модема. Модемът ще отговори така: +CSCS: ("GSM", "PCCP437", "CUSTOM", "HEX")

Ако този низ съдържа "HEX" или "UCS2", Unicode изглежда се поддържа. За да укажете, че ще използвате HEX низ за изпращане на съобщението, задайте кодовата страница на "HEX" или "UCS2" в зависимост от отговора на модема. В нашия пример ще настроим модема на "HEX": AT+CSCS="HEX"

След това трябва да посочим правилната DCS (схема за кодиране на данни) за Unicode съобщения, която е 0x08. Можем да зададем тази стойност, като променим четвъртия параметър на командата AT+CSMP на '8': AT+CSMP=1,167,0,8

Модемът вече е готов да изпраща съобщения като Unicode. Сега е моментът да изпратите истинското съобщение: AT+CMGS="+31638740161"

Заменете горния телефонен номер с вашия собствен номер на мобилен телефон. Модемът ще отговори с: >

Единственото нещо, което трябва да програмирате сами, е проста рутина, която преобразува Unicode низа в шестнадесетичен низ като този: مرحبا

Което е „Здравей“ на арабски ще бъде преобразувано по следния начин: „06450631062D06280627“

Можете да изпратите този шестнадесетичен низ към модема: 06450631062D06280627

След няколко секунди модемът ще отговори с ИД на съобщението, което показва, че съобщението е изпратено правилно: +CMGS: 63

Съобщението ще пристигне на мобилния телефон скоро.

person BrokenGlass    schedule 22.11.2010
comment
резултатът от AT+CSMP=1,167,0,8 е грешка - person mahdi; 22.11.2010

Имах подобен проблем с Unicodes (съобщения на персийски или арабски). Моля, проверете моя въпрос и отговор в тази тема. В тази нишка можете да разберете как да изпращате правилно Unicode съобщения и проблемът ви ще бъде разрешен.

Първо, моля, прочетете тази статия, след което преобразувайте вашето 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“ е шестнадесетичният формат на „مرحبا“!

person Yasser Mohseni    schedule 16.03.2013

Опитвам се да изпратя sms на език фарси според тази статия: 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;
    }
person user3695670    schedule 31.05.2014
comment
Възниква грешка на този ред: recievedData = ExecCommand(port, AT+CSMP=1,167,0,8, 300, Неуспешно задаване на формат на съобщението.); Моля за помощ? - person Leebeedev; 21.02.2021

изглежда, че трябва да използвате формат PDU.

започнете с тази връзка!

person M.Movaffagh    schedule 29.11.2011

Това работи за изпращане на bangla или който и да е език, а също и за изпращане на 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;

Това е преобразуван низ в шестнадесетичен

public static string Str2Hex(string strMessage)
{
    byte[] ba = Encoding.BigEndianUnicode.GetBytes(strMessage);
    string strHex = BitConverter.ToString(ba);
    strHex = strHex.Replace("-", "");
    return strHex;
 }
person ShahadatDev    schedule 20.01.2018