欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringMvc 中从前台页面传参数到后台获取时中文乱码解决方法

程序员文章站 2022-03-02 11:45:06
...

在web.xml中配置了CharacterEncodingFilter过滤器,但传到后台的数据还是乱码,

核查用户名中文无法重复校验,英文的话运行正常

1. 采用相同的格式去接受(ISO-8859-1),然后用UTF-8去转换

byte[] bytes= empName.getBytes("ISO-8859-1");
empName=new String(bytes,"UTF-8");

tomcat的自带编码是ISO-8859-1的格式,是不兼容中文的编码的。所以我们从后台接收的时候要注意。

    @ResponseBody
    @RequestMapping("/checkuser")
    public Msg checkUser(@RequestParam("empName") String empName) throws UnsupportedEncodingException {

        byte[] bytes= empName.getBytes("ISO-8859-1");
        empName=new String(bytes,"UTF-8");

        //先判断用户名是否是合法的表达式
        //java 里面的正则表达式没有/
        //var regName=/(^[a-z0-9_-]{6,16}$)|(^[\u2E80-\u9FFF]{2,5})/;
        String regx="(^[a-z0-9_-]{6,16}$)|(^[\\u2E80-\\u9FFF]{2,5})";
        if(!empName.matches(regx)){
            return Msg.fail().add("va_msg","用户名为6-16为英文或2-5位中文");
        }

        //数据库用户名重复校验
        boolean b=employeeService.checkUser(empName);
        System.out.println(empName);
        System.out.println(b);
        //查询中文名count()计数出错
        if(b){
            return Msg.success();
        }else{
            return Msg.fail().add("va_msg","用户名不可用");
        }
    }

控制台输出正确,重复校验结果正确

SpringMvc 中从前台页面传参数到后台获取时中文乱码解决方法

2. 修改了tomcat目录中conf里面的server.xml

D:\work20\apache-tomcat-7.0.104-windows-x64\apache-tomcat-7.0.104\conf\server.xml

 添加  URIEncoding="UTF-8" 

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

此时进行用户名重复校验,中文控制台输出正确,校验结果正确

注:

参考:

解决javaWEB中前台传数据到后台中文乱码问题的3种方法

SpringMvc中从前台页面传参数到后台获取时中文乱码解决方案

相关标签: SSM