java要多思考下

成长^_^

   ::  :: 新随笔 ::  ::  :: 管理 ::
  33 随笔 :: 0 文章 :: 19 评论 :: 0 Trackbacks
尝试的解决方案:
1、通过各种new String(content.getBytes("xxx"), "xxx")的方式转码,乱码变的更乱
2、通过jad反编译其api源码,发现有如下代码{
 if (this.messageData != null)
    {
      String msg = new String(this.messageData);
      if (this.msgFmt == 15) {
        try {
          msg = new String(this.messageData, "GBK");//这里其api做了GBK的转码
        } catch (UnsupportedEncodingException e) {
          msg = new String(this.messageData);
        }
      } else if (this.msgFmt == 8) {
        byte[] data = this.messageData;
        if ((this.messageData[0] == 5) && (this.messageData[1] == 0) && (this.messageData[2] == 3)) {
          data = new byte[this.messageData.length - 6];
          System.arraycopy(this.messageData, 6, data, 0, data.length);
        }
        try {
          msg = new String(data, "ISO-10646-UCS-2");
        } catch (UnsupportedEncodingException e) {
          msg = new String(data);
        }
      }
      return msg;
    }
}
3、而this.messageData = message.getBytes();//这里直接getBytes()是根据Charset.defaultCharset()来指定的
4、尝试使用System.setProperty("file.encoding","GBK"); 来修改字符集,发现对Charset.defaultCharset()未改变
5、没有办法了,只好修改tomcat启动的编码设置为GBK方式,这样Charset.defaultCharset()取值就为GBK了,从而乱码问题解决。

总结,最后的解决方法很简单,浪费了很多时间,但是这个过程让我了解到了更多底层的一些设置。
posted on 2011-11-24 18:21 java要多思考下 阅读(837) 评论(0)  编辑  收藏 所属分类: 研发管理

只有注册用户登录后才能发表评论。


网站导航: