串口助手不支持中文 超级终端可以
       public SerialPort m_sp;        // 串口初始化
        private void InitializeMy()
        {
            string strT;
            strT = textBox1.Text;            try
            {
                m_sp = new SerialPort();
                m_sp.BaudRate = 57600;
                m_sp.StopBits = StopBits.One;
                m_sp.Parity = Parity.None;
                m_sp.DataBits = 8;
                m_sp.Handshake = Handshake.None;
                m_sp.DataReceived += OnSerialDataReceived;
                m_sp.Encoding = System.Text.Encoding.GetEncoding("GB2312");
            }
            catch (System.Exception e)
            {
                MessageBox.Show(e.Message);
            }        }
就可以发中文了

解决方案 »

  1.   

    设置字符集
    System.Text.Encoding.GetEncoding("GB2312"); 
      

  2.   

    将字符串转换为unicode
    public static string ToUnicode(string str)
            {
                byte[] data = Encoding.BigEndianUnicode.GetBytes(str);
                int i = 0;
                StringBuilder sb = new StringBuilder();
                foreach (byte b in data)
                {
                    if (i++ % 2 == 0) sb.Append("\\u");
                    sb.AppendFormat("{0:X2}", b);
                }
                return sb.ToString();
            }
    更多实用帮助函数下载:http://download.csdn.net/source/2277988
      

  3.   

    把数据直接转换成byte[]数组就没有关系了。
      

  4.   

    谁能帮我解决一下问题谢谢 地址(http://topic.csdn.net/u/20110608/17/ea387470-0398-4bb3-b92a-68a37f63cd16.html?31016)
      

  5.   

    SerialPort 支持的通信都是字节流,至于内容,看你两边处理软件的协议了,反正,发送方不管是字符串还是图片数据什么的,所有内容都要先处理成一个byte[],然后发送。接收方根据协议自己还原数据。
    个人感觉使用二进制序列化和反序列化比较简单,直接使用dotnet的功能,不需要自己另外写编码解码函数了。
      

  6.   

    +1和工具无关,设置Encoding为Encoding.GetEncoding(936)
    然后Write就可以了
      

  7.   

    发byte[] 至于串口终端怎么识别 是串口终端的事情了。
      

  8.   

    XP下的很多方法,也好做,加码解码方式一样用GB2312或默认,就可以了。
    最近刚做了个CE下的串口调试助手,中文支持较好,是另一种方法的,
    关键技术是,统一为字节接收,接收到字节流后,使用缓冲技术,保留
    最后一个,不能显示的半个字节,留做和下次一起在判定。
    每次收到的字节流均需判定最后一字节是否是半个汉字的前部,是前部
    则存入缓冲区。