从串行端口接收的数据具有不正确的新行字符

时间:2012-12-21 15:08:05

标签: c# serial-port

我编写了一个将数据发送到COM端口并接收返回数据的应用程序。

发送效果很好,但接收没有。多行和只读文本框中的换行符不正确。

截图:

enter image description here

我的接收代码是:

void serialPort_DataReceived(object s, SerialDataReceivedEventArgs e)
{
    byte[] data = new byte[_serialPort.BytesToRead];
    _serialPort.Read(data, 0, data.Length);

    string str = System.Text.Encoding.UTF8.GetString(data);

    textBox3.Text = textBox3.Text + str;

    textBox3.SelectionStart = textBox3.TextLength;
    textBox3.ScrollToCaret();
}

在打开端口之前,我将New Line属性设置为\ r \ n:

_serialPort.NewLine = "\r\n";

如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

来自the documentation

  

获取或设置用于解释对调用结束的值   ReadLine和WriteLine方法。

关键在于它使用 来解释 结束通话,而不是 设置

NewLine属性处理SerialPort对象如何尝试解释传入数据。它不会操纵传入的数据。

换句话说,通过将NewLine属性设置为“\ r \ n”,您将告诉 查找 “\ r \ n”并使用该属性作为NewLine角色。

进入串口的数据就是这样。您无法更改其他人发送数据的方式。 (除非您也编写了该应用程序。)您只能告诉SerialPort如何正确地尝试读取数据。

您需要做的是弄清楚程序发送给您的是什么,并将.NewLine属性设置为 。很可能它只是发送“\ n”或只是“\ n”,所以如果你设置NewLIne属性匹配,你的程序将开始正确识别发送给它的换行符。

SerialPort.ReadLine Property Usage

上可以提供更多信息

答案 1 :(得分:2)

解决方案是:

textBox3.Text = textBox3.Text + str.Replace("\r", "\r\n");

答案 2 :(得分:1)

试试这个:

_serialPort.NewLine = Environment.NewLine;