• 中文乱码


    ------------恢复内容开始------------

    1、URL传中文参数为什么会出现乱码?

    Http请求传输时将url以ISO-8859-1编码,服务器收到字节流后默认会以ISO-8859-1编码来解码成字符流(造成中文乱码)。

    2、解决办法:

    方式一:通过转码的方式处理乱码。

    我们需要把request.getParameter(“参数名”)获取到的字符串先用ISO-8859-1编码成字节流,然后再将其用utf-8解码成字符流。

    • 代码示例:
    • 发送请求:
    package com.asd.modules.controller;
    
    import com.asd.common.constant.SysInfo;
    import com.asd.modules.pojo.menu.vo.MenuAndUserInfoVo;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    import java.util.ResourceBundle;
    
    /**
     * @author zs
     * @date 2019/12/2 15:53
     * 跳转到其他系统的接口
     */
    @Controller
    @RequestMapping("/otherSystems")
    public class OtherSystemsController {
    
        /**
         * 跳转至精算手续费预估系统
         * @return
         */
        @RequestMapping("eacs")
        public ModelAndView eacs(){
            //精算手续费预估系统地址
            ResourceBundle interfaceAddress = ResourceBundle.getBundle("interfaceAddress");
            String eacs = interfaceAddress.getString("eacs");
            //获取系统信息
            MenuAndUserInfoVo sysInfo = SysInfo.getSysInfo();
            //岗位信息
            String gradeName = sysInfo.getGradecname();
            String gradeId = "";
            if(sysInfo.getGradecname().indexOf("人保再准备金管理岗") != -1){
                gradeId = "1";//审核权限
            }else if (sysInfo.getGradecname().indexOf("人保再准备金精算岗") != -1){
                gradeId = "2";//确认权限
            } else {
                gradeId = "0";//无权限信息
            }
            ModelAndView mv = new ModelAndView("redirect:" + eacs);
            //mv.addObject("gradeId", "人保再准备金管理岗".equals(sysInfo.getGradecname())?1:2);
            mv.addObject("gradeId", gradeId);
            mv.addObject("comCode", sysInfo.getComcode());
            mv.addObject("userCode", sysInfo.getUsercode());
            mv.addObject("userName", sysInfo.getUsercname());
            return mv;
        }
    }
    • 接收请求:
    package com.asd.reserve.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import javax.servlet.http.HttpServletRequest;
    
    /**
     * @author zs
     * @date 2019/3/14 9:12
     * 接收请求端的信息
     */
    @Controller
    @RequestMapping("/assessTriangle")
    public class AssessTriangleController {
    
        @RequestMapping(value ="eacs")
        public String alipayforward4(HttpServletRequest request) throws Exception {
            String characterEncoding = request.getCharacterEncoding();
            String referer = request.getHeader("Referer");
            String gradeid = request.getParameter("gradeid");
            String comcode = request.getParameter("comcode");
            String userCode = request.getParameter("userCode");
            String userName = new String(request.getParameter("userName").getBytes("iso-8859-1"),"UTF-8");
            return "basicData/assessBasicData";
        }
    }

    如上所示,接收到的userName为中文,需要对乱码进行处理。

    方式二:通过Tomcat配置文件,设置URL编码集(URIEncoding)设置编码,这种方法也是一劳永逸的,修改Tomcat/conf 目录下 server.xml。

    <Connector port="8080" protocol="HTTP/1.1"   
        connectionTimeout="20000"   
        redirectPort="8444"
        useBodyEncodingForURI="true" URIEncoding="UTF-8"/>

    说明:标黄部分是对编码的设置。

    下面来解释一下这两个属性的意义:

    useBodyEncodingForURI参数表示是否用request.setCharacterEncoding参数对URL提交的数据和表单中GET方式提交的数据进行重新编码,在默认情况下,该参数为false。

    URIEncoding参数指定对所有GET方式请求进行统一的重新编码(解码)的编码方式。

    URIEncoding和useBodyEncodingForURI区别:

    URIEncoding是对所有GET方式的请求的数据进行统一的重新编码,而useBodyEncodingForURI则是根据响应该请求的页面的request.setCharacterEncoding参数对数据进行的重新编码,不同页面可以有不同的重新编码的编码方式。

    如果错过太阳时你流了泪,那你也要错过群星了。
    在所有的矛盾中,要优先解决主要矛盾,其他矛盾也就迎刃而解。
    不要做个笨蛋,为失去的郁郁寡欢,聪明的人,已经找到了解决问题的办法,或正在寻找。
  • 相关阅读:
    css文档流
    gitolite搭建
    Packets out of order. Expected 1 received 27...
    前端常见跨域解决方案
    跨时代的分布式数据库 – 阿里云DRDS详解
    Redis持久化机制
    redis实现消息队列
    队列
    ide-helper
    Bitmap 位操作相关
  • 原文地址:https://www.cnblogs.com/szrs/p/12030764.html
Copyright © 2020-2023  润新知