السلام عليكم احبتي
قمت ببرمجة برنامج بالدوت نت يقوم بجلب قيمة الرصيد باستخدام ال AT COMMADS
ونجحت العملية عندما يكون الجواب باللغة الانجليزية
اما بالعربية فتضهر النتيجة بحروف غير مفهومة (ليست هيكسا ولا اوكتت ولا اسكي)
قمت بتحويل الناتج الى مصفوفة كركتر وتحويلها الى انتجر ومقارنة كل كركتر بالكركتر ماب
بس ما زبط معي ياريت حدا يساعدني بكيفية اظهار الناتج باللغة العربية
طبقت هذا الامر: AT+CUSD=1,"*100#",15
المفروض يضهر الجواب (رصيدك يحوي xxxxx ل.س.)
ولكن الجواب كان يضهر عندي : +CUSD: 0,"arähb¨ ' 10•@ — éhb@èJ@@œ —@ @d@ä@ @ @L$ @(",17
ارجو المساعدة بليييييييييييييييييز
مثال :
using System.Collections.Generic;
using System.Text;
using System.IO.Ports;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static AutoResetEvent readNow = new AutoResetEvent(false);
static SerialPort port; static void Main(string[] args)
{
try
{
Console.Write("Enter the port name your phone is connected to: ");
string portname = Console.ReadLine();
port = EstablishConnection(portname);
string recievedData = ExecuteCommand("AT", 300);
recievedData = ExecuteCommand("AT+CMGF=1", 300);
char q='"';
String command = "AT+CUSD=1,"+q.ToString()+"*100#"+q.ToString()+",15";
recievedData = ExecuteCommand(command, 300);
if (recievedData.EndsWith("\r\nOK\r\n"))
recievedData = "Message sent successfully";
// recievedData is unkown encoding
}
}
catch (Exception e)
{
Console.WriteLine("Error Message: "+e.Message.Trim()+"\r\nHit any key to Exit");
Console.ReadLine();
}
finally
{
if (port != null)
{
port.Close();
port.DataReceived -= new SerialDataReceivedEventHandler(DataReceived);
port = null;
}
static string ExecuteCommand(string command,int timeout)
{
port.DiscardInBuffer();
port.DiscardOutBuffer();
readNow.Reset();
port.Write(command+"\r");
string recieved = receive(timeout);
return recieved;
}
static string receive(int timeout)
{
string buffer = string.Empty;
do
{
if (readNow.WaitOne(timeout, false))
{
string t = port.ReadExisting();
buffer += t;
}
}
while (!buffer.EndsWith("\r\nOK\r\n") && !buffer.EndsWith("\r\n> ") && !buffer.Contains("ERROR"));
return buffer;
}
static SerialPort EstablishConnection(string portName)
{
SerialPort port = new SerialPort();
port.PortName = portName;
port.BaudRate = 19200;
port.DataBits = 8;
port.StopBits = StopBits.One;
port.Parity = Parity.None;
port.ReadTimeout = 300;
port.WriteTimeout = 300;
port.Encoding = Encoding.GetEncoding("1256");
port.DataReceived += new SerialDataReceivedEventHandler(DataReceived);
port.Open();
port.DtrEnable = true;
port.RtsEnable = true;
return port;
}
static void DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (e.EventType == SerialData.Chars)
readNow.Set();
}
}
}
using System;