1,問題由來
我的主要工作是負責統一適配平台這塊,主要任務是提供給客戶統一的調用接口,客戶使用這個接口可以通過我們再調不同廠家的接口。主要流程如下:
現在客戶那邊傳來的請求報文里面包含中文,使用webservice發送一般是用UTF-8,但是客戶那邊傳來的請求的格式肯定不是的,不然也不會出現中文亂碼:
2,解決之法
在北向處理的流程中,在接收到客戶傳來的報文的時候進行編碼轉換。加上下面兩個方法,在得到客戶請求報文時只需調用第一個方法轉換一下即可。
//中文字符處理 public String charSetConvert(String xmlRequest){ String charSet = NeopServerImpl.getEncoding(xmlRequest); try { byte[] b = xmlRequest.getBytes(charSet); xmlRequest = new String(b, "UTF-8"); } catch (Exception e) { logger.error("輸入的內容不屬於常見的編碼格式,請再仔細核實", e); } return xmlRequest; } public static String getEncoding(String str) { String encode = "GB2312"; try { if (str.equals(new String(str.getBytes(encode), encode))) { // 判斷是不是GB2312 String s = encode; return s; // 是的話,返回GB2312,以下代碼同理 } } catch (Exception e) { logger.error("getEncoding異常---GB2312", e); } encode = "ISO-8859-1"; try { if (str.equals(new String(str.getBytes(encode), encode))) { // 判斷是不是ISO-8859-1 String s1 = encode; return s1; } } catch (Exception e) { logger.error("getEncoding異常---ISO-8859-1", e); } encode = "UTF-8"; try { if (str.equals(new String(str.getBytes(encode), encode))) { // 判斷是不是UTF-8編碼 String s2 = encode; return s2; } } catch (Exception e) { logger.error("getEncoding異常---UTF-8", e); } encode = "GBK"; try { if (str.equals(new String(str.getBytes(encode), encode))) { // 判斷是不是GBK String s3 = encode; return s3; } } catch (Exception e) { logger.error("getEncoding異常---GBK", e); } return ""; // 到這一步,你就應該檢查是不是其他編碼啦
}
注:以上部分代碼參考網上資源:http://zhidao.baidu.com/link?url=gXafoS7hIAKe8lcuUldTW9sQWa3C3VnLLbfid09lY2WYO8ypuM0yc5BFGKFY5vaPuaJBLi4Qkr5cDBe0_eWE0_