串口接收中文时乱码

Andrew_wx 2014-01-16 11:47:34
求助大神:串口接收文本时,以十六进制接收时数据正常,接收以中文显示时偶尔会出现乱码,一直搞不定,请高手给点意见。

代码如下
        private void btnComOpen_Click(object sender, EventArgs e)
{
if (btnComOpen.Tag.ToString() == "0")
{
ComDevice.PortName = cbbComList.SelectedItem.ToString();
ComDevice.BaudRate = 115200;
ComDevice.Parity = (Parity)0;
ComDevice.DataBits = 8;
ComDevice.StopBits = (StopBits)1;
try
{
ComDevice.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
btnComOpen.Text = "关 闭";
btnComOpen.Tag = "1";
picComStatus.Image = Properties.Resources.green;
ComDevice.DataReceived += new SerialDataReceivedEventHandler(ComDevice_DataReceived);
}
else
{
try
{
ComDevice.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
btnComOpen.Text = "打 开";
btnComOpen.Tag = "0";
picComStatus.Image = Properties.Resources.red;
}
}

#region 接收数据

private void ComDevice_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] ReDatas = new byte[ComDevice.BytesToRead];//返回命令包
ComDevice.Read(ReDatas, 0, ReDatas.Length);//读取数据
UpdateRecevie(System.Text.Encoding.Default.GetString(ReDatas));
}

public delegate void UpdateString(object NewData);
public void UpdateRecevie(object NewData)
{
if (this.InvokeRequired)//等待异步
{
UpdateString _myInvoke = new UpdateString(UpdateRecevie);
this.Invoke(_myInvoke, new object[] { NewData });
}
else
{
txtComReceive.AppendText(NewData.ToString());
txtComReceive.SelectionStart = txtComReceive.Text.Length - 1;
txtComReceive.ScrollToCaret();
}
}
#endregion
...全文
886 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jrl5365 2014-01-17
  • 打赏
  • 举报
回复
wangyongchao880622 2014-01-17
  • 打赏
  • 举报
回复
先用十六进制发数,然后你在转成assice码
冬夜 2014-01-16
  • 打赏
  • 举报
回复
刚才借别人的帐号发的贴,改成UTF8后中文就是乱码了
晚安苏州 2014-01-16
  • 打赏
  • 举报
回复
UpdateRecevie参数用UTF-8试试
BenBenBears 2014-01-16
  • 打赏
  • 举报
回复
jhdxhj 2014-01-16
  • 打赏
  • 举报
回复
做个记号,也许以后。。。。。。
冬夜 2014-01-16
  • 打赏
  • 举报
回复
自己解决了 在定义的时候 ComDevice.Encoding = System.Text.Encoding.GetEncoding("GB2312"); 接收:
 private void ComDevice_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
       UpdateRecevie(ComDevice.ReadExisting());
    }
内容概要:本文详细探讨了LabVIEW串口工具在接收汉字数据出现乱码问题的原因及解决方案。首先介绍了LabVIEW串口工具在自动化控制与数据采集中的重要性及其常见应用场景。接着阐述了串口通信的基本原理,包括串口通信标准(如RS-232、RS-422、RS-485)和数据帧格式,以及LabVIEW中实现串口通信的具体步骤。文章重点分析了汉字乱码产生的三个主要原因:编码不一致、串口参数设置不当和缓冲区与数据处理问题,并提供了针对性的解决方案,如确定发送端编码、使用LabVIEW中的字符串编码转换函数、配置串口读取编码、复查串口参数、添加数据校验与纠错机制以及优化缓冲区设置。最后通过实践验证,证明了上述方法的有效性,并展望了LabVIEW串口通信在未来工业自动化和物联网等领域的应用前景。 适合人群:具备一定编程基础,从事自动化控制与数据采集工作的工程师和技术人员。 使用场景及目标:①解决LabVIEW串口工具接收汉字数据出现的乱码问题;②确保串口通信中汉字数据的准确传输与解析;③提升对LabVIEW串口通信原理及编码设置的理解,优化数据处理流程。 阅读建议:本文内容详实,涵盖了从理论到实践的各个环节。读者应结合自身项目需求,重点掌握编码设置、串口参数配置及数据校验等关键技术点,并通过实际操作进行验证,以确保能够熟练应对LabVIEW串口通信中可能出现的各种问题。

111,118

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧