C# 从串行端口接收的数据具有不正确的新行字符
我已经编写了一个应用程序,将数据发送到COM端口并接收返回的数据 发送效果很好,但接收效果不好。多行和只读文本框中的新行字符不正确 截图: 我的接收代码是:C# 从串行端口接收的数据具有不正确的新行字符,c#,serial-port,C#,Serial Port,我已经编写了一个应用程序,将数据发送到COM端口并接收返回的数据 发送效果很好,但接收效果不好。多行和只读文本框中的新行字符不正确 截图: 我的接收代码是: void serialPort_DataReceived(object s, SerialDataReceivedEventArgs e) { byte[] data = new byte[_serialPort.BytesToRead]; _serialPort.Read(data, 0, data.Length);
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();
}
在打开端口之前,我将新行属性设置为\r\n:
_serialPort.NewLine = "\r\n";
如何解决此问题?尝试以下方法:
_serialPort.NewLine = Environment.NewLine;
发件人:
获取或设置用于解释调用结束的值
ReadLine和WriteLine方法
关键在于它使用来解释通话结束,而不是设置通话结束
NewLine属性处理SerialPort对象如何解释传入数据。它不会处理传入的数据
换句话说,通过将换行符属性设置为“\r\n”,您告诉它查找“\r\n”,并将其用作换行符
进入串行端口的数据就是它本身。您无法更改其他人发送数据的方式。(除非您也编写了该应用程序。)您只能告诉SerialPort如何正确读取数据
您需要做的是找出程序发送给您的内容,并将.NewLine属性设置为该值。很可能只是发送“\n”或“\r”,因此如果将换行符属性设置为匹配,程序将开始正确识别发送给它的换行符
在中还有一些信息可能会有所帮助。解决方案是:
textBox3.Text = textBox3.Text + str.Replace("\r", "\r\n");
这种方法可能存在的问题是,由于数据是通过COM端口输入的,因此它很可能来自另一台计算机,而这台计算机可能使用或可能不使用相同的环境(甚至是相同的操作系统)。