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

如何通过GSM调制解调器使用AT命令以C#读取Unicode消息(如波斯语和阿拉伯语)?,c#,unicode,sms,gsm,at-command,C#,Unicode,Sms,Gsm,At Command,我读这篇文章是为了发送Unicode短信,但我想知道如何阅读utf8短信 我发送此命令,但收到的消息文本如下: AT+CMGL="ALL" +CMGL: 1,"REC READ","97563937625","","2013/08/28 00:53:30+18" 0041006A006D0064006A00740020 我的短信阅读命令: ExecCommand(port,"AT", 300, "No phone connected");

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

我发送此命令,但收到的消息文本如下:

 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不支持UTF8。从

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

来自

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

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

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

UCS-2

8位数据


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

我认为GSM不支持UTF8。从

    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 7位字母表、8位数据字母表和16位UCS-2字母表

来自

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

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

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

UCS-2

8位数据

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

专用字符串解码器(字符串值)
    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;
    }
{ 正则表达式字母仅=新正则表达式(“^[0-9]|[A-Z]$”; if((value.Length%4==0)和&lettersOnly.Match(value.Success) { 字符串数据=FromHex(值); 返回数据; } 其他的 返回值; } 公共静态字符串FromHex(字符串十六进制) { 短[]原始=新短[十六进制长度/4]; for(int i=0;i
专用字符串解码器(字符串值)
{
正则表达式字母仅=新正则表达式(“^[0-9]|[A-Z]$”;
if((value.Length%4==0)和&lettersOnly.Match(value.Success)
{
字符串数据=FromHex(值);
返回数据;
}
其他的
返回值;
}      
公共静态字符串FromHex(字符串十六进制)
{
短[]原始=新短[十六进制长度/4];
for(int i=0;i
请注意,虽然无线传输格式可能永远都是16位编码,但如果在其
AT+CSCS实现中支持UTF-8编码,则手机有可能在DTE-DCE接口的UTF-8之间进行转换。27.007将“UTF-8”定义为一个定义值,尽管它不是强制性的。请注意,虽然无线传输格式可能只不过是16位编码,但如果在其
AT+CSCS
实现中支持该编码,则手机可以在DTE-DCE接口的UTF-8之间进行转换。27.007将“UTF-8”定义为定义值,尽管它不是强制性的。