今天调试Symbian程序,发现一个郁闷的问题!由客户端发送数据到服务器端会出现乱码,客户端与服务器端用XML来封装数据,如果客户端输入奇数个中文时,服务器端会解析出错,抛出SAX……Exception,如果输入偶数个中文则一切正常。
由于服务器端println()后打出为乱码,所以先从乱码问题开始解决。
原来的收串是通过int来取的,我改成了byte[]数组,声明一个byte数组 byte[] bt = new byte[1024];
通过循环读取数据到数组中,并把数组转换成String,再append到一个StringBuffer。最后通过String str=new String(sb,"UTF-8");来将StringBuffer转换成String。
代码如下:
ByteArrayOutputStream baos = null;
InputStream in = null;
ByteArrayInputStream ba = null;
DataOutputStream dos = null;
try {
baos = new ByteArrayOutputStream();
in = request.getInputStream();
StringBuffer sb = new StringBuffer();
byte[] bt = new byte[1024];
int j;
while ((j = in.read(bt)) != -1) {
sb.append(new String(bt, "UTF-8"));
}
System.out.println("Received String UTF-8:" + sb.toString().trim());
String xmlStr = sb.toString().trim();
ba = new ByteArrayInputStream(xmlStr.getBytes("UTF-8"));//好像就是这一步的问题,原来没加UTF-8这个参数。
HeadDataParseHandler headparse = new HeadDataParseHandler();
headparse.headParse(ba);
String str = headparse.getSCmd();
ba.close();
ba = new ByteArrayInputStream(xmlStr.getBytes("UTF-8"));
String returnStr = "";
不过这样有一个问题,如果XML串的长度大于1024,则还可能出现乱码问题。
还好项目用到的XML都不长,就不考虑了。其实就是一个编码转换的问题。
Symbian发送的数据是UTF-8编码,这样到tomcat上可能会出现编码形式不匹配,导致乱码。
似乎还有更好的解决办法,可是没找到!