前后端数据交互中文乱码问题汇总大全

PS→无奈:有志者自有千计万计,无志者只感千难万难。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相信大家在请求的过程中或多或少的都遇到过请求中文乱码的问题把,我也不例外,网上解决中文乱码的办法一大堆,但是昨天碰到的让我试了很多很多方法都解决不了,最终找到解决方案,特此记录一下。
本人采用的是ajax请求:

$.ajax({
		url:url,
		data:data,
		type:'post',
        // scriptCharset: 'utf-8',
		success:function(msg){
		var survey=eval("("+msg+")");
		$("#myDialogRoot input[name='effective'][value='"+survey.surveyDetail.effective+"']").attr("checked",true);
		$("#myDialogRoot input[name='effectiveIp'][value='"+survey.surveyDetail.effectiveIp+"']").attr("checked",true);
		$("#myDialogRoot input[name='rule'][value='"+survey.surveyDetail.rule+"']").attr("checked",true);
		$("#myDialogRoot input[name='ruleCode']").val(survey.surveyDetail.ruleCode);
		$("#myDialogRoot input[name='refresh'][value='"+survey.surveyDetail.refresh+"']").attr("checked",true);
		$("#myDialogRoot input[name='mailOnly'][value='"+survey.surveyDetail.mailOnly+"']").attr("checked",true);
		$("#myDialogRoot input[name='ynEndNum'][value='"+survey.surveyDetail.ynEndNum+"']").attr("checked",true);
		$("#myDialogRoot input[name='endNum']").val(survey.surveyDetail.endNum);
		$("#myDialogRoot input[name='ynEndTime'][value='"+survey.surveyDetail.ynEndTime+"']").attr("checked",true);
		if(survey.surveyDetail.endTime!="null"){
		    $("#myDialogRoot input[name='endTime']").val(survey.surveyDetail.endTime);
		}
		$("#myDialogRoot input[name='showShareSurvey'][value='"+survey.surveyDetail.showShareSurvey+"']").attr("checked",true);
		$("#myDialogRoot input[name='showAnswerDa'][value='"+survey.surveyDetail.showAnswerDa+"']").attr("checked",true);				
		}
	});

试过很多方式,后台最终解决方式,就只此一句话:

 @ResponseBody
    @RequestMapping(value = "/my-survey!attrs")
    public String attrs(@RequestParam("id")String id) throws Exception {
        HttpServletResponse response=SpringUtils.getResponse();
//        response.setContentType("text/javascript;charset=utf-8");
        response.setCharacterEncoding("UTF-8");
        String result="";
        try{
            SurveyDirectory survey=surveyDirectoryManager.getSurvey(id);
            JsonConfig cfg = new JsonConfig();
            cfg.setExcludes(new String[]{"handler","hibernateLazyInitializer"});
            cfg.registerJsonValueProcessor(Date.class, new DateJsonValueProcessor());
            JSONObject jsonObject=JSONObject.fromObject(survey,cfg);
            response.getWriter().println(jsonObject.toString());
            result=jsonObject.toString();
        }catch(Exception e){
            e.printStackTrace();
        }
        return null;
    }

网上所说方法有以下几种,在此汇总记录一笔:

1.Controller响应方法中已经设置了编码格式

response.setContentType("text/html;charset=UTF-8");

JSONObject jsonObject = new JSONObject();

PrintWriter out = response.getWriter();

 

页面头部也设置了一致(utf-8)的编码格式

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

然而页面仍然会乱码。

 解决办法:

在Ajax方法中设置编码格式:

scriptCharset: 'utf-8'

2.//在ajax请求时候设置编码:

contentType: "application/x-www-form-urlencoded; charset=utf-8"

3.在后台的请求映射路径后面加上produces属性:

@RequestMapping(value = "***",produces={"text/html;charset=UTF-8;","application/json;"}) 

4.前台js将参数值转为统一资源标示符(URI)

例如name = encodeURI(encodeURI(‘张三'));注意要encodeURI两次。
后台需要对URI进行解析
String name= request.getParameter(“name”);
name= URLDecoder.decode(name, “UTF-8″);

5.在后台response加上这两句:

  1. request.setCharacterEncoding("UTF-8");  
  2.         response.setContentType("text/html;charset=UTF-8");

本人以上5种情况都试过,要么返回仍是乱码,要么返回不乱码,但是前端接收到数据无任何反应,至此本人试了很多遍,发现本人所用框架只能用一种方式才能解决,就是在后台response处加上一句,只能一句,不然前段会报返回数据格式错误等信息。
本人最终解决方案:

response.setCharacterEncoding("UTF-8");  // 仅此一句便可解决问题,加别的不行,用别的也不行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值