如何通过GSM调制解调器使用AT命令读取C#中的Unicode消息(如波斯语和阿拉伯语)

本文关键字:消息 Unicode 波斯语 阿拉伯语 中的 读取 调制解调器 GSM 何通过 命令 AT | 更新日期: 2023-09-27 18:29:27

我读这篇文章是为了发送Unicode短信,但我想知道如何阅读utf8消息?

通过GSM调制解调器使用AT命令在C#中发送Unicode消息(如波斯语和阿拉伯语)

我发送了这个命令,但收到的消息文本类似于:

 AT+CMGL="ALL"
  +CMGL: 1,"REC READ","97563937625","","2013/08/28 00:53:30+18"
     0041006A006D0064006A00740020

我的命令阅读短信:

          ExecCommand(port,"AT", 300, "No phone connected");
            ExecCommand(port,"AT+CSCS='"UCS2'"'n", 300, "No phone connected");
            ExecCommand(port,"AT+CMGF=1", 300, "Failed to set message format.");
            ExecCommand(port,"AT+CPMS='"MT'"", 300, "Failed to select message storage.");          
            string input = ExecCommand(port, "AT+CMGL='"ALL'"", 5000, "Failed to read the messages.");

如何通过GSM调制解调器使用AT命令读取C#中的Unicode消息(如波斯语和阿拉伯语)

    private string decoder(string value)
    {
        Regex lettersOnly = new Regex("^[0-9]|[A-Z]$");
        if ((value.Length % 4 == 0) && lettersOnly.Match(value).Success)
        {
            string data = FromHex(value);
            return data;
        }
        else
            return value;
    }      
    public static string FromHex(string hex)
    {
        short[] raw = new short[hex.Length / 4];
        for (int i = 0; i < raw.Length; i++)
        {
            raw[i] = Convert.ToInt16(hex.Substring(i * 4, 4), 16);
        }
        string s = "";
        //wtf encoding utf32 ride ahmagh kos sher pas mide
        foreach (var item in raw)
        {
            s += char.ConvertFromUtf32(item).ToString();
        }
        return s;
    }

我认为GSM不支持UTF8。从…起http://en.wikipedia.org/wiki/Short_Message_Service

短消息可以使用各种字母进行编码:默认的GSM 7位字母、8位数据字母和16位UCS-2字母

和来自http://en.wikipedia.org/wiki/GSM_03.40

中文、韩语或日语的信息必须使用UTF-16字符编码进行编码

数据编码方案(TP-DCS)字段主要包含关于消息编码的信息。GSM只识别文本消息的2种编码和二进制消息的1种编码:

GSM 7位默认字母表(也包括使用国家语言移位表)

UCS-2

8位数据

在同一段中,他们告诉我们,2012年引入了一种新的基于国家的编码(国家语言转换表)。不过这不是UTF-8。