尝试的解决方案:
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了,从而乱码问题解决。
总结,最后的解决方法很简单,浪费了很多时间,但是这个过程让我了解到了更多底层的一些设置。