الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة باستخدام اللغة العربية باستخدام AT Commands

بدأه باسل علي في 28 مارس 2011 · 3 رد · 1,219 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم احبتي

قمت ببرمجة برنامج بالدوت نت يقوم بجلب قيمة الرصيد باستخدام ال 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;

#2

السلام عليكم

أبسط طريقة لتجنب "وجع الراس" هي أخذ الأرقام من الإجابة بالأنجليزية و كتابة بقية النص.

يمكنك إستخدام القسم Encoding لتحويل الرد إلى اللغة العربية...

#3

الله يعطيك العافية وشكرا على ردك

ولكن الرسالة باللغة الانكليزية ليست نفسها باللغة العربية

لان الرسالة الانكليزية من شبكة جوال

والعربية من شبكة اخرى

ياريت المساعدة

#4
ConvertHexToString("string", System.Text.Encoding.BigEndianUnicode)

public static string ConvertHexToString(String hexInput, System.Text.Encoding encoding)
        {
            int numberChars = hexInput.Length;
            byte[] bytes = new byte[numberChars / 2];
            try
            {

                for (int i = 0; i < numberChars; i += 2)
                {
                    bytes[i / 2] = Convert.ToByte(hexInput.Substring(i, 2), 16);
                }
                //return encoding.GetString(bytes);
            }
            catch (Exception r) { }
            return encoding.GetString(bytes);
        }

مواضيع مشابهة