Расшифровка полученного USSD-сообщения

Я отправляю команду AT+CUSD на модем, и когда я получаю это сообщение, я не могу его ни понять, ни расшифровать, пожалуйста, мне нужна помощь. это образец

AT+CUSD=1,"*100#",15
+CUSD: 0,"Service not allowed.",15
OK
AT+CUSD=1,"*155#1#",15
+CUSD: 0,"0645063306280642002006270644062F06410639003A00200037002C003600320035002E0030003000200020000A06270644063506440627062D064A0629003A0030002E0030003000200020000A00200627064406440627062D0642002006270644062F06410639003A0030002E003000300020",72
OK

вы видите, что первый читается, а dcs - 15, а другой - нет, а th dcs - 72, помогите !!


person samhightech    schedule 16.04.2014    source источник
comment
Пробовали ли вы декодировать эту длинную строку чисел, используя различные распространенные схемы кодирования (GSM 7 бит, UCS2....), чтобы увидеть, сможете ли вы понять это?   -  person user1725145    schedule 16.04.2014
comment
Да, со мной не получилось. кстати, этот ответ должен быть на арабском языке.   -  person samhightech    schedule 16.04.2014
comment
Что вы получаете, когда декодируете его с помощью Unicode? Я вижу много 06, и, согласно Википедии, стандартный арабский кодируется от 0600 до 06FF.   -  person user1725145    schedule 16.04.2014
comment
Спасибо, мистер С. Лист, вы помогли мне найти раствор. как вы сказали, каждые четыре составляют 16-битный символ Юникода, но в Юникоде я получаю что-то вроде مسبق!الدفع:! 7 625,00! ! но в UCS-2 я получаю مسبق الدفع: 7 ​​625,00, что правильно, благодаря тому, что проблема решена.   -  person samhightech    schedule 16.04.2014


Ответы (1)


Что вы получаете, когда декодируете его с помощью Unicode? Я вижу много 06, и, согласно Википедии, стандартный арабский кодируется от 0600 до 06FF. Список S

Ответ благодаря S List

заключается в том, что мне нужно декодировать каждые четыре буквы, такие как «0645», используя кодировку «UCS2».

и мой код такой:

String origin = "0645063306280642002006270644062F06410639003A00200037002C003600320035002E0030003000200020000A06270644063506440627062D064A0629003A0030002E0030003000200020000A00200627064406440627062D0642002006270644062F06410639003A0030002E003000300020";
if (origin.Count() % 2 == 0)
            {
                List<short> list = new List<short>();
                List<byte> bytes = new List<byte>();
                var encode = Encoding.GetEncoding("UCS-2");
                for (int i = 0; i < origin.Count(); i += 4)
                {
                    list.Add(Convert.ToInt16(origin.Substring(i, 4), 16));
                }
                foreach (var item in list)
                {
                    bytes.Add((byte)(item & 255));
                    bytes.Add((byte)(item >> 8));
                }
                return encode.GetString(bytes.ToArray());
            }
person samhightech    schedule 23.04.2014