2013-08-28 14 views
1

我看了這篇文章發送Unicode短信,但我想知道如何閱讀utf8消息?如何在C#中使用AT命令通過GSM調制解調器讀取Unicode消息(例如波斯文和阿拉伯文)?

Sending Unicode Messages (such as in Persian and Arabic) in C# using AT Commands through GSM Modem

我送這個命令,但收到消息文本是這樣的:

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."); 

回答

2

我不認爲UTF8是支持GSM。從http://en.wikipedia.org/wiki/Short_Message_Service

短消息可以使用多種字母進行編碼:默認GSM 7比特字母表中,8位數據的字母表,而16位的UCS-2字母表

和從http://en.wikipedia.org/wiki/GSM_03.40

在中國,韓國,日本的語言的消息必須使用UTF-16字符編碼

的數據編碼舍姆被編碼e(TP-DCS)字段主要包含有關消息編碼的信息。 GSM只承認2文字信息編碼和1個編碼二進制消息:

GSM 7位默認字母表(其包括使用國家語言移表的爲好)

UCS-2

的8位數據

在他們告訴大家,有這是在2012年推出不過這不是UTF-8新的國家爲基礎的編碼(在國家語言移位臺)同款。

+0

注意的是,雖然在空中傳輸格式可能永遠不會是什麼,但16位編碼,可對是否支持該編碼的手機轉換爲和UTF-8的DTE-DCE接口在其「AT + CSCS」實施中。 27.007將「UTF-8」定義爲定義值,但它不是強制性的。 – hlovdal

1
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; 
    } 
相關問題