12、c#串口开发中解决中文乱码(System.ArgumentException:“‘GB2312‘ is not a supported encoding name.)

前言:串口开发中,一般涉及到和底层嵌入式打交道,数据传送格式大都为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);

四、引用文章

【C#】基础篇(3) C#实现串口助手,解决中文乱码_皮皮猫吖的博客-CSDN博客_c#写串口助手

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值