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")就可以了,可能对接的网关方对中文时这样处理的吧,导致我在这块耗费很多时间。
标签:中文,校验位,UTF,String,8859,ret,当有,ISO,quickfix From: https://www.cnblogs.com/1024llh/p/17468403.html