在 C# 中通过串行端口发送 SMS 但收到垃圾

Sending SMS via Serial Port in C# but getting garbage

我正在通过串行端口发送短信,但收到的是????。请帮助我正确地批量接收短信。下面是我的代码:

SmsHandler.SendSMS("hello world",phonenumber,"USB Modem");

   public static void SendSMS(String smstxt, String PhoneNumber, String DeviceName)
    {
       _serialPort = new SerialPort(Port.getPort(DeviceName), 19200, Parity.None, 8, StopBits.One);
        _serialPort.Handshake = Handshake.None;
        _serialPort.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
        _serialPort.ReadTimeout = 2000;
        _serialPort.WriteTimeout = 2000;
        _serialPort.Open();
        try
        {
            if (!_serialPort.IsOpen)
                _serialPort.Open();
            _serialPort.Write("AT+CMGF=1\r\n");
            Thread.Sleep(1000);
            _serialPort.Write("AT+CSCA=SERVICE\r\n");// Service Center  
            Thread.Sleep(1000);
            _serialPort.Write("AT+CMGS=\"" + PhoneNumber + "\"" + Environment.NewLine);
            _serialPort.Write(smstxt + char.ConvertFromUtf32(26) + Environment.NewLine);


            MessageBox.Show("Message Sent");

        }
        catch (Exception ex)
        {
            MessageBox.Show("Error opening/writing to serial port :: " + ex.Message, "Error!");
        }
    }
    static void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        Thread.Sleep(500);
        string data = _serialPort.ReadLine();
        Console.Write(data);
    }

我在接收手机上收到垃圾。请帮助解决问题。谢谢

可能与串口编码有关?

也许尝试不同的编码:

 _serialPort.Encoding = Encoding.GetEncoding("iso-8859-1");

另外,我可以建议您查看:http://www.scampers.org/steve/sms/libraries.htm - 它有一个简单的 API 用于执行 AT 命令。

尝试更改控制台字体,使用像 Lucida Console 这样的 TrueType 字体而不是默认的 Raster 字体,因为第一个不支持 Uni 字符。

这篇文章晚了三个月,但它可能会对以后阅读这篇文章的人有所帮助。

要通过串行端口发送短信,您需要将文本转换为消息的十六进制表示,然后发送结果。 例如:

_serialPort.Write(StrToHex(smstxt) + char.ConvertFromUtf32(26) + Environment.NewLine);

而 StrToHex 方法可以是这样的:

public static string StrToHex(string strMessage)
{
    byte[] byteArray = Encoding.UTF8.GetBytes(strMessage);
    string strHex = BitConverter.ToString(byteArray);
    strHex = strHex.Replace("-", "");
    return strHex;
}