java 如何 解决url 路径上的中文乱码

如何解决 查询中文乱码问题 部署 tomcat https访问查询也是乱码 tomcat设置的是utf-8

img

乱码如下:

img

做 urlencode,编码成类似 %ab%cd 这种

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/724593
  • 你也可以参考下这篇文章:JavaWeb学习-Tomcat系列-5-手动部署第二种方式之war包以及URL和URI简介
  • 除此之外, 这篇博客: JavaWeb自我学习——Request(请求)中的 请求参数中文乱码处理(Tomcat 8.0之后,已将GET请求乱码问题解决,设置默认的解码方式为UTF-8) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • POST请求  (getReader()获取)

    解决方案:获取参数前设置字符输入流的编码

        request.setCharacterEncoding("UTF-8");//设置字符输入流的编码

    注意:肯定要先设置后获取参数。

    GET请求(getQueryString()获取)

    解决方案:和POST底层不一样,POST的解决方案不行。GET的解决方案也可以解决POST的问题,是通用的。

            URL编码
            1.将字符串按照编码方式转为二进制
            2.每个字节转为2个16进制数并在前边加上%

    //乱码原因: tomcat进行URL解码,默认的字符集ISO-8859-1
    //1先对乱码数据进行编码:转为字节数组
    byte[] bytes = xxx.getBytes(StandardCharsets.ISO_8859_1);
    //2字节数组解码
    xxx = new String(bytes,StandardCharsets.UTF_8);
    System.out.println(xxx);
            
    
    //或者一行
    xxx = new String(xxx.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
  • 以下回答由chatgpt基于相关博客总结生成:

    针对该问题,可以通过以下步骤解决:

    1.在Tomcat配置文件conf/server.xml中,将URLEncoding参数设置为UTF-8,如下:

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

    2.在Java代码中,使用URLDecoder对参数进行解码,示例如下:

    String param = URLDecoder.decode(request.getParameter("param"), "UTF-8");
    

    使用以上方法,可以解决Tomcat服务器在使用https访问时出现查询乱码的问题。

    另外,如果使用jQuery的ajax发送请求时,也需要设置请求头的contentType为application/x-www-form-urlencoded;charset=UTF-8,示例如下:

    $.ajax({
        type: 'POST',
        url: url,
        data: data,
        contentType: 'application/x-www-form-urlencoded;charset=UTF-8',
        success: function (data) {
            // do something
        }
    });
    

    注意:以上方法仅适用于使用UTF-8编码的情况,如果服务器和页面使用的是其他编码格式,需要修改相应的参数和代码。