如何解決WebService參數傳遞中文亂碼問題


1,問題由來

        我的主要工作是負責統一適配平台這塊,主要任務是提供給客戶統一的調用接口,客戶使用這個接口可以通過我們再調不同廠家的接口。主要流程如下:

        image

       現在客戶那邊傳來的請求報文里面包含中文,使用webservice發送一般是用UTF-8,但是客戶那邊傳來的請求的格式肯定不是的,不然也不會出現中文亂碼:
       image

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_


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM