如何通过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.");
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。