奇怪的问题!!

今天调试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上可能会出现编码形式不匹配,导致乱码。

似乎还有更好的解决办法,可是没找到!

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值