嘗試的解決方案:
1、通過各種new String(content.getBytes("xxx"), "xxx")的方式轉碼,亂碼變的更亂。
2、通過jad反編譯其api源碼,發(fā)現(xiàn)有如下代碼{
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()是根據(jù)Charset.defaultCharset()來指定的
4、嘗試使用System.setProperty("file.encoding","GBK"); 來修改字符集,發(fā)現(xiàn)對Charset.defaultCharset()未改變
5、沒有辦法了,只好修改tomcat啟動的編碼設置為GBK方式,這樣Charset.defaultCharset()取值就為GBK了,從而亂碼問題解決。
總結,最后的解決方法很簡單,浪費了很多時間,但是這個過程讓我了解到了更多底層的一些設置。