none
在c# 的serialport 中,如何从串口中接收中文数据 RRS feed

  • 问题

  • 我使用 readLine()等serialport的read方法读取到得数据凡是涉及到中文就乱码,应该怎么解决呢
    2010年2月28日 6:03

答案

  • 端口打开前设置这个属性试试!
    周雪峰
    谢谢回复,但是打开端口之前设置还是不行,用了两种方式设置都不行:
      sp.Encoding = Encoding.GetEncoding("GB2312");
      sp.Encoding = Encoding.UTF8

    另外请问在读取数据的时候需不需要设置呢,我目前读取时直接string str = spReadExisting()这样来读取数据的
    • 已标记为答案 enilu 2010年3月5日 0:24
    2010年2月28日 17:08

全部回复

  • 你好!
         尝试设置SerialPort的Encoding属性为Encoding.UTF8
         看看能否解决!
    周雪峰
    2010年2月28日 8:08
    版主
  • 如果还是没有解决,直接使用System.Text.Encoding.GetEncoding("GB2312")来设置这个属性!
    周雪峰
    2010年2月28日 8:12
    版主
  • 如果还是没有解决,直接使用System.Text.Encoding.GetEncoding("GB2312")来设置这个属性!
    周雪峰
    谢谢,回答,我试试看
    2010年2月28日 11:21
  • 如果还是没有解决,直接使用System.Text.Encoding.GetEncoding("GB2312")来设置这个属性!
    周雪峰
    这里设置属性是在端口打开后就设置一次吗?还是每次之前都要设置一次?我是这样设置的:

     
    serialport sp = new serialport("com2",115200);
    sp.Open();
    sp.Encoding=Encoding.UTF8
    或sp.Encoding=Encoding.GetEncoding("GB2312"),

     但是这两种设置都不行,我哪里有错误吗?
    2010年2月28日 11:45
  • 端口打开前设置这个属性试试!
    周雪峰
    2010年2月28日 12:18
    版主
  • 端口打开前设置这个属性试试!
    周雪峰
    谢谢回复,但是打开端口之前设置还是不行,用了两种方式设置都不行:
      sp.Encoding = Encoding.GetEncoding("GB2312");
      sp.Encoding = Encoding.UTF8

    另外请问在读取数据的时候需不需要设置呢,我目前读取时直接string str = spReadExisting()这样来读取数据的
    • 已标记为答案 enilu 2010年3月5日 0:24
    2010年2月28日 17:08
  • 端口打开前设置这个属性试试!
    周雪峰
    我现在在端口打开之气那设置sp的编码为UTF8,
    然后通过string str = sp.ReadExisting();得到串口里的数据,
    但是这个str字符串是如下格式:
    \r\n\0a\0d\0a\0d\0a\0dbM\0G\0j\0g\0j\0g\0j\r\n\r\nOK\r\n
    我的真实数据是:
    |r\nadadad才能Gjgjgj OK \r\n

    我应该怎样才能将上述的字符串转换为下面得形式呢?,上面那种字符时UTF8格式的字符串吗,我看网上说是用Regex.Unesacpe("")去掉转义符就行了,但是我试了没有用啊
    2010年2月28日 17:45
  • 问题解决了,调试的时候发现,使用serialport.read(byte[] bytes,int offset,int count)方法来接收数据,然后使用serialport默认的编码转换为字符串的时候信息头:如短信状态,接收时间,发送号码可以正常获得,但是信息内容乱码。而使用BigEndianUnicode将byte数组转换为字符串的时候,信息内容可以正常显示,单其他信息头又乱码。做法是将那个byte数组按标识分为两块(信息头和信息内容之间有明显的换行符),一块信息头byte数组,一块信息内容byte数组,然后各自使用不同的编码来转换。就行了
    2010年3月5日 0:23
  • 请问可否贴源码出来学习一下呢?
    2010年6月3日 2:37