Enviando mensagens Unicode (como em persa e árabe) em C # usando comandos AT por meio de modem GSM

Estou desenvolvendo um aplicativo para Modems GSM (D-Link DWM-156) em C # .Net usando comandos AT. Eu tenho um problema ao enviar mensagens Unicode (como mensagens escritas em persa ou árabe). Aqui está o núcleo do meu programa:

SerialPort GSMPort = new SerialPort();

GSMPort.PortName = "COM6";
GSMPort.BaudRate = 9600;
GSMPort.Parity = Parity.None;
GSMPort.DataBits = 8;
GSMPort.StopBits = StopBits.One;
GSMPort.Handshake = HandShake.RequestToSend;
GSMPort.DtrEnable = true;
GSMPort.RtsEnable = true;

GSMPort.Open();

GSMPort.Write("AT\r");
Thread.Sleep(1000);
GSMPort.Write("AT+CMGF=1\r");
Thread.Sleep(1000);
GSMPort.Write("AT+CMGS=\"" + destinationNumber + "\"\r\n");
Thread.Sleep(1000);
GSMPort.Write(shortMessage+ "\x1A");

Funciona bem para letras inglesas e ASCII. eu liEste artigo e pode enviar mensagens Unicode no Hyperterminal usando comandos AT:

AT [Enter]
OK
AT+CSCS="UCS2" or AT+CSCS="HEX" [Enter] ---> We have to convert our message to hex 
OK
AT+CMGF=1 [Enter]
OK
AT+CMGS="destinationNumber" [Enter]
> 0633064406270645002006450631062D06280627 ---> The hex format of our message (سلام مرحبا)
+CMGS: 139
OK

Como esses comandos funcionaram corretamente, eu adicioneiGSMPort.Write("AT+CSCS=\"UCS2\"\r"); ao meu aplicativo, e tentei enviar0645 0631 062D 0628 0627 (مرحبا) ou0633 0644 0627 0645 (سلام)

GSMPort.Write("AT\r");
Thread.Sleep(1000);
GSMPort.Write("AT+CSCS=\"UCS2\"\r");
Thread.Sleep(1000);
GSMPort.Write("AT+CMGF=1\r");
Thread.Sleep(1000);
GSMPort.Write("AT+CMGS=\"" + destinationNumber + "\"\r\n");
Thread.Sleep(1000);
GSMPort.Write("0633064406270645" + "\x1A");

Mas, ao contrário dos comandos AT no Hyperterminal, o destino não recebe letras corretas. Qual é a diferença entre esses comandos AT no código C # e no código Hyperterminal? Eu apreciarei se você me ajudar a resolver este problema.

Informação adicional: Como você sabe, não tenho nenhum problema para enviar mensagens Unicode (como letras persas) por hyperterminal e usando comandos AT. No código abaixo eu tento enviar سلام, e "0633064406270645" é a forma hexadecimal dele. Mas eu recebo □□□□ no meu celular.

GSMPort.Encoding = UnicodeEncoding.GetEncoding(1256);
GSMPort.Write("AT\r");
Thread.Sleep(1000);
GSMPort.Write("AT+CSCS=\"UCS2\"\r");
Thread.Sleep(1000);
GSMPort.Write("AT+CMGF=1\r");
Thread.Sleep(1000);
GSMPort.Write("AT+CMGS=\"" + destinationNumber + "\"\r\n");
Thread.Sleep(1000);
GSMPort.Write("0633064406270645" + "\x1A");

No ambiente hiperterminal, Por outro lado, tudo vai bem e eu recebo.

AT [Enter]
OK
AT+CSCS="UCS2"
OK
AT+CMGF=1 [Enter]
OK
AT+CMGS="destinationNumber" [Enter]
> 0633064406270645 [Ctrl+Z]
+CMGS: 139
OK

Tenho notado que nas propriedades hyperterminal se eu verificar a "linha de envio termina com line feeds" (é em propriedades-> Configurações-> ASCII Setups, por favor, verifique a imagem abaixo), vou ter o mesmo problema que eu tinha em Código c #. Acho que "o envio da linha termina com feeds de linha" está ativado emGSMPort.Write por padrão? Se sim, como posso desativá-lo?

questionAnswers(3)

yourAnswerToTheQuestion