如何通过GSM调制解调器使用AT命令以C#读取Unicode消息(如波斯语和阿拉伯语)?
我读这篇文章是为了发送Unicode短信,但我想知道如何阅读utf8短信 我发送此命令,但收到的消息文本如下:如何通过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");
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”定义为定义值,尽管它不是强制性的。