quickfix协议当有中文时校验位错误问题解决

quickfix校验位计算都是根据ISO-8859-1编码计算,知道这个规则后续我们处理中文就很好处理了。但是如果用ISO-8859-1编码有中文会出现乱码,如果将CharsetSupport.setCharset设置为UTF-8或者GBK时,在发送数据时会报java.nio.bufferoverflowexception:null,或者校验位失败。

1、往step网关发送消息时有中文时,需要将中文部分转为ISO-8859-1编码发送。qucikfix默认编码就是ISO-8859-1.

public static String convertISO88591(String str){
  String ret = " ;
try{
 byte[] bytes = str.getBytes("UTF-8);
 ret = new String(bytes,"ISO-8859-1);
}catch(Exception e){} 
    return ret;
}

  

2、接收网关数据有中文时,需要对中文进行单独转码,转为GBK或者UTF-8都可以

public static String convertUTF8(String str){
String ret = "";
try{
byte[] bytes = str.getBytes("ISO-88591-);
ret = new String(bytes,"UTF-8);
}catch(Exception e){}
return ret;
}

 不过个人觉得支持中文只要将CharsetSupport.setCharset("UTF-8")就可以了,可能对接的网关方对中文时这样处理的吧,导致我在这块耗费很多时间。

posted @ 2023-06-09 10:07  苦逼的1024  阅读(262)  评论(0)    收藏  举报