java ajax发送数据到后台,中文乱码

//首先说明,我的服务器和页面编码都是GBK,所以尝试了很多种GBK的方式
前台:
function printFunction(){
                window.print();
                $.ajax({
                     url  : '/tpzssearch/handleRecordLog.action',
                     type : 'post',
                     //各种尝试
                     //processData : true,
                     //scriptCharset:'GBK',
                     // contentType: 'application/x-www-form-urlencoded; charset=gbk', 
                      //  contentType: "application/x-www-form-urlencoded;charset=gbk",
                     data : {tablename:'<%=java.net.URLEncoder.encode(tablename,"UTF-8")%>',
                             search:'<%= java.net.URLEncoder.encode(session.getAttribute("oradetailQueryString").toString(),"UTF-8")%>',
                             info:'<%=java.net.URLEncoder.encode(rs,"UTF-8")%>'
                             }
                 });
            }

后台:
//gbk互转UTF-8试过、ISO-8859-1互转gbk试过、ISO-8859-1互转UTF-8试过
public static String toUTF(String arg) {
        if (arg != null && arg.trim().length() > 0) {
            try {
                arg = new String(arg.getBytes("GBK"), "UTF-8");
            } catch (Exception e) {
            }
        } else {
            arg = "";
        }
        return arg;
    }
logModel.setTableName(URLDecoder.decode(request.getParameter("tablename"),"UTF-8"))
最后:就是传参数时java.net.URLEncoder.encode(tablename,"UTF-8"),接收参数时URLDecoder.decode(request.getParameter("tablename"),"UTF-8"),解决了

解决乱码的4个方向:

方法一:
在后台中使用request.setCharacterEncoding("UTF-8");


方法二:
$.ajax({
    type:'post',
    contentType:'application/x-www-form-urlencoded; charset=UTF-8'
});

方法三:

public static String toUTF(String arg) {
        if (arg != null && arg.trim().length() > 0) {
            try {
                arg = new String(arg.getBytes("GBK"), "UTF-8");
            } catch (Exception e) {
            }
        } else {
            arg = "";
        }
        return arg;
    }

方法四:

urlencodeURI(url);前台转码一次,java.net.URLDecoder.decode(paperTitle,"UTF-8");后台也转码

 

当由a标签传递数据时,在windows系统可能不会出现中文乱码,但在Linux系统会出现乱码,的解决办法

<a href="javascript:location.href='xxxxAction.a?doSearchDetail&brandId=${brandId}&areaId=${areaId}&filialeId=${filialeId}&cityId=${cityId}&brandNameEncode='+encodeURI(encodeURI('${brandName}'))+'&areaNameEncode='+encodeURI(encodeURI('${areaName}'))+'&filialeNameEncode='+encodeURI(encodeURI('${filialeName}'))+'&cityNameEncode='+encodeURI(encodeURI('${cityName}'))+'&isFirst=1';">${dto.qtySum}</a>
String isFirst = req.getParameter("isFirst");
if ("1".equals(isFirst)) {
	brandName = java.net.URLDecoder.decode(req.getParameter("brandNameEncode"),"utf-8");
	areaName = java.net.URLDecoder.decode(req.getParameter("areaNameEncode"),"utf-8");
	filialeName = java.net.URLDecoder.decode(req.getParameter("filialeNameEncode"),"utf-8");
	cityName = java.net.URLDecoder.decode(req.getParameter("cityNameEncode"),"utf-8");
}

注意前段需要两次转码,后台只需要一次

转载于:https://my.oschina.net/u/2369810/blog/597775

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值