串口接收中文时乱码

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
...全文
817 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());
    }

110,565

社区成员

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

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

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