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")就可以了,可能对接的网关方对中文时这样处理的吧,导致我在这块耗费很多时间。

浙公网安备 33010602011771号