[代码积累]解决HL7协议、TCP/IP通讯、16进制转字符串,中文乱码的问题。

来源:互联网 发布:qt网络编程视频教程 编辑:程序博客网 时间:2024/06/05 02:54


  最近在做一个流水线的接口,连接的是日立生化和雅培化学发光。流水线软件提供商提供了基于HL7的通讯协议,其要求发发送完整的病人信息。

  之前和迈瑞等一些国产仪器做LIS接口时,他们提供的通讯方案,也是只支持网口,并且通讯协议是HL7,之前因为没有强制要求发送或者解析带有中文信息的数据,所以一直都是用ASCII编码,关于乱码的问题也没有处理。

  而这一次仪器厂家需要病人的信息,而这些内容大都是中文,尝试用他们的软件发送了一段测试信息,在网口测试工具显示是中文无乱码,所以肯定是解码存在问题,就此取的该数据的二进制数据,尝试进行解析。


误区

  通讯文档中有一个节点,说明编码是UTF-8,然而通过HexToString方法指定了几种常见的编码,包括UTF-8时,均无效果。


解决

  感觉自己已经用穷举法试遍了所有的编码,为什么仍然不行呢。然后就去网上搜常见的编码格式,一个“Default”引起了我的注意,然后……就是他了。


_(:з」∠)_

  回顾了一下,一个小小的编码格式也折磨了半天,不过终于解决了很久以来的一个困惑。不过我和信息科科长说这个事情的时候,他突然问了一句,那以后我装系统是不是只能装简体中文……


  关于16进制转字符串,可以参考我之前的文章,不过在网上搜相关资料的时候,发现了一段代码挺简洁的,出处的话我忘记了,好像说是微软提供的:

        public static string HexToStr(string mHex) // 返回十六进制代表的字符串        {            mHex = mHex.Replace(" ", "");            if (mHex.Length <= 0) return "";            byte[] vBytes = new byte[mHex.Length / 2];            for (int i = 0; i < mHex.Length; i += 2)                if (!byte.TryParse(mHex.Substring(i, 2), NumberStyles.HexNumber, null, out vBytes[i / 2]))                    vBytes[i / 2] = 0;            return Encoding.Default.GetString(vBytes);        }


原创粉丝点击