java.io.CharConversionException isHexDigit JS转码问题

首先escape(String)采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。

所以第一可以尝试去掉escape()方法,用encodeURI(encodeURI(String))对你要进行传递的参数进行转码,然后在Servlet接受的时候用java.net.URLDecoder.decode(String,”UTF-8”) 即可
例如:

var url = "UpdateContractServlet?contractId="+ escape(contractId);   //此处传递一个参数

      System.out.println(request.getParameter("contractId"));                     //此处取值会出现中文乱码形如???

要做如下修改:

 var url = "UpdateContractServlet?contractId="+ encodeURI(encodeURI(contractId)); 

或者:

    var url = "UpdateContractServlet?contractId="+ contractId;
    url =  encodeURI(encodeURI(url));
    System.out.println(java.net.URLDecoder.decode(request.getParameter("contractId"),"UTF-8") );

另外,还有一种情况也会出现这类错误:

比如:点击grid中的一行数据请求一个controller,将该行数据作为入参传给这个controller,此时就会出项这个JS转码的问题,那么我们怎么解决呢?非常简单!可以将该行数据在传给后台controller之前进行解析,解析成形如下面的JSON格式数据再传给后台就OK了:

//获取输入框中的查询条件
    var interfaceNameBox=document.getElementById("interfaceName");
    var interfaceName=interfaceNameBox.options[interfaceNameBox.selectedIndex].text;
    var provinceBox=document.getElementById("province");
    var province=provinceBox.options[provinceBox.selectedIndex].text
    //var province = $('#province').val();
    var startDate=$('#startDate').datebox('getValue');
    var endDate=$('#endDate').datebox('getValue');
    //构造查询参数
    var qryParam={
            interfaceName:interfaceName,
            province:province,
            startDate:startDate,
            endDate:endDate,
            pageNumber:pageNumber,
            pageSize:pageSize
    };

你可能感兴趣的:(js,js转码问题)