前言:串口开发中,一般涉及到和底层嵌入式打交道,数据传送格式大都为HEX格式的,然后后台接受时候做个转换就可以了,但是少部分会有要显示发送端的中文,比如下位机有个输入屏幕,直接发送的是中文,这时候,作为上位机就需要直接将其数据转换为中文格式显示了。
开发环境:vs2022
目标框架:.NET6.0
项目类型:wpf
一、代码
public MainWindow()
{
InitializeComponent();
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
InitSerailPort();
}
void InitSerailPort()
{
try
{
if (SerialPortSP != null)
{
SerialPortSP.PortName = "COM3";
SerialPortSP.BaudRate = 9600;
SerialPortSP.Parity = Parity.None;
SerialPortSP.DataBits = 8;
SerialPortSP.StopBits = StopBits.One;
SerialPortSP.Handshake = Handshake.None;
SerialPortSP.RtsEnable = true;
SerialPortSP.ReadTimeout = 3000;
SerialPortSP.NewLine = "/r/n";
SerialPortSP.DtrEnable = true;
SerialPortSP.ReceivedBytesThreshold = 1;
SerialPortSP.DataReceived += serialPort1_DataReceived;
SerialPortSP.Encoding = Encoding.GetEncoding("GB2312");
SerialPortSP.Open();
}
}
catch (Exception)
{
throw;
}
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
MessageBox.Show(SerialPortSP.ReadExisting());
}
二、效果
三、说明
3.1、本文只是测试解决中文乱码的问题,代码不具备参考性,网上有很多优秀的串口开源代码可参考;
3.2、这里只针对发送方发送格式是字符类型,如果是HEX格式就不能这样写了;
3.3、设置编码格式
SerialPortSP.Encoding = Encoding.GetEncoding("GB2312");
3.4、接受数据方法
SerialPortSP.ReadExisting()
3.5、设置编码格式报错
需要手动安装下 System.Text.Encoding.CodePages包
然后在初始化时加上下面代码,因为GB2312是国内通用的字符串编码格式,所以加上后,程序就知道用什么解码格式去解码了。
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
四、引用文章