在使用socket与后台进行通信时,会碰到一些乱码的问题。
一般碰到乱码的时候,需要首先考虑的就是字符编码格式是否统一了,这时候就可以先尝试转码来解决问题。
近日也同样碰到了这个问题(后来才知道后台返回的是基于MINA的SOCKET)。
后台返回的时候,拿到的是包装过的数据(应该是个帧格式的),
因此,在android端我们也用基于MINA的Socket框架来收发信息。
需要注意的是:
//设置协议封装解析处理
socketConnector.getFilterChain().addLast("protocol",
new ProtocolCodecFilter(new FrameCodecFactory()));
在新建socket的时候也要记得设置协议封装和解析处理。
public class FrameCodecFactory implements ProtocolCodecFactory {
@Override
public ProtocolEncoder getEncoder(IoSession ioSession) throws Exception {
return new FrameEncoder();
}
@Override
public ProtocolDecoder getDecoder(IoSession ioSession) throws Exception {
return new FrameDecoder();
}
}
这里有两个方法,一个是输出时候编码 FrameEncoder(),一个是接收的时候解码 FrameDecoder。
需要有对应的编码解码,最后才能拿到正确的数据。