servlet接口中编码问题,求大神进来解决一下

图片说明我在servlet中对一串字符串进行加密,但是编码老是乱码,然后我进行了UTF-8处理图片说明就是这种,但是问题处理的不全面,出现的问题是经常有个别字符乱码图片说明求哪位大神帮忙解决一下

在传输时对参数进行URL编码或者使用加密方式操作

像是解密结果少了尾部的几个字节导致的,检查一下你的加解密算法

utf-8处理语句换一下
String datastr4 = new String(datastr3.getBytes("ISO-8859-1"), "utf-8");

                    Map<String,String> map = new HashMap<String, String>();
                    map.put("mhtOrderNo",mhtOrderNo);
                    map.put("mhtReqTime",mhtReqTime);
                    map.put("payeeAccType",payeeAccType);
                    map.put("payeeName","祝在哪");
                    map.put("payeeCardNo",payeeCardNo);
                    map.put("mhtOrderAmt",mhtOrderAmt);
                    map.put("agentPayMemo",agentPayMemo);
                    map.put("payeeCardUnionNo",payeeCardUnionNo);
                    srt1 = this.base("appId=" +  Config.appId);
                    map = MapUtils.mapRemoveNull(map);
                    String dataStr = FormDateReportConvertor.postFormLinkReport(map);
                    //String datastr4 = new String(datastr3.getBytes("ISO-8859-1"), "utf-8");
                    String dataStr2=new String(dataStr.getBytes("utf-8"), "GBK");
                    srt2 = EncryDecryUtils.encryptFromDESBase64(DSEKey.trim(), dataStr2.trim());
                    srt3 = this.MD5Message(dataStr, MD5Key);
                    srt3 = this.base(srt3);
                    message1.append(srt1);  
                    message1.append("|");
                    message1.append(srt2); //拼接返回报文
                    message1.append("|");
                    message1.append(srt3);
                    return_mess.append(message1.toString());
                    Report=return_mess.toString().trim();
                    xml = HttpPost.http("https://dby.ipaynow.cn/agentpay/agentPay",Report);

你参考一下这个

    String toRSAStr = FormDateReportConvertor.postFormLinkReport(requestMap);
            message1 = EncryDecryUtils.base64Encrypt(message1);//base64(appId=xxx)
            String message2 = toRSAStr;
            message2 = EncryDecryUtils.encryptFromDESBase64(des3Key,message2);// base64(3DES(报文原文)
            String message3 = EncryDecryUtils.base64Encrypt(EncryDecryUtils.md5(toRSAStr.toString().trim() +"&"+ md5Key));//base64(MD5(报文原文+&+ md5Key))
            String message = message1+"|"+message2+"|"+message3;

            System.out.println("==================");                   
            System.out.println(message2);
            System.out.println("==================");

解密方法

 //对返回的数据 先用base64解密 再用3Des解密
    public static String decryptFromBase64DES(String key,String data) {
        String result = null;
        byte[] keyByte = key.getBytes();
        byte[] base64Byte = EncryDecryUtils.getFromBase64byte(data);
        try {
            result =  new String(DESUtils.Union3DesDecrypt(keyByte,base64Byte),"utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

加密算法,是不是你们公司自己的一套算法。

     public static String postFormLinkReport(Map<String,String> dataMap){

        StringBuilder reportBuilder = new StringBuilder();

        List<String> keyList = new ArrayList<String>(dataMap.keySet());
        Collections.sort(keyList);

        for(String key : keyList){
            reportBuilder.append(key+"="+dataMap.get(key)+"&");
        }

        reportBuilder.deleteCharAt(reportBuilder.lastIndexOf("&"));

        return reportBuilder.toString();
    }

这段代码是处理属性值的,从解密好的字符串中将代码分割,先以&分割再以=号分割

                String[] str4 = srt.split("\\&");
                    for (int i = 0; i < str4.length; i++) {
                         if("mhtOrderNo".equals(str4[i].toString().split("\\=")[0].toString()))
                         {
                             mhtOrderNo=str4[i].toString().split("\\=")[1].toString().replaceAll("\0", "").trim();  
                         }
                         if("mhtReqTime".equals(str4[i].toString().split("\\=")[0].toString()))
                         {
                             mhtReqTime=str4[i].toString().split("\\=")[1].toString().replaceAll("\0", "").trim();  
                         }
                         if("payeeAccType".equals(str4[i].toString().split("\\=")[0].toString()))
                         {
                             payeeAccType=str4[i].toString().split("\\=")[1].toString().replaceAll("\0", "").trim();  
                         }
                         if("payeeName".equals(str4[i].toString().split("\\=")[0].toString()))
                         {
                             payeeName=str4[i].toString().split("\\=")[1].toString().replaceAll("\0", "").trim();

                         }
                         if("payeeCardNo".equals(str4[i].toString().split("\\=")[0].toString()))
                         {
                             payeeCardNo=str4[i].toString().split("\\=")[1].toString().replaceAll("\0", "").trim();  
                         }
                         if("payeeCardUnionNo".equals(str4[i].toString().split("\\=")[0].toString()))
                         {
                             payeeCardUnionNo=str4[i].toString().split("\\=")[1].toString().replaceAll("\0", "").trim();  
                         }
                         if("mhtOrderAmt".equals(str4[i].toString().split("\\=")[0].toString()))
                         {
                             mhtOrderAmt=str4[i].toString().split("\\=")[1].toString().replaceAll("\0", "").trim();  
                         }
                         if("agentPayMemo".equals(str4[i].toString().split("\\=")[0].toString()))
                         {
                             agentPayMemo=str4[i].toString().split("\\=")[1].toString().replaceAll("\0", "").trim();  
                         }