解决Java GET传参乱码问题

1. 简介

在Java开发中,常常会遇到GET请求传参乱码的问题。GET请求传递参数时,参数是通过URL中的查询字符串传递的,而URL中只支持ASCII字符,当参数包含非ASCII字符时,就会出现乱码的情况。本文将介绍如何解决这个问题。

2. 解决步骤

下面是解决Java GET传参乱码问题的步骤:

步骤 描述
1 获取GET请求中的参数
2 对参数进行URL解码
3 按照指定字符集对参数进行编码

现在让我们一步一步来详细说明如何实现这些步骤。

3. 获取GET请求中的参数

在Java中,可以通过HttpServletRequest的getParameter方法获取GET请求中的参数。在你的Servlet或者Controller中,首先注入HttpServletRequest对象,然后使用如下代码获取参数:

String paramName = request.getParameter("paramName");

这里的"paramName"是你需要获取的参数名。

4. 对参数进行URL解码

获取到参数后,我们需要进行URL解码,将参数从URL编码转换为原始的字符。使用Java的URLDecoder类来解码参数:

String decodedParam = URLDecoder.decode(paramName, "UTF-8");

这里的"UTF-8"是解码时使用的字符集,一般情况下都使用UTF-8。

5. 对参数进行编码

解码后的参数是原始的字符,如果你需要将参数重新编码,可以使用URLEncoder类。使用URLEncoder对参数进行编码可以确保参数中的特殊字符正确传递,同时还可以避免出现乱码的情况。

String encodedParam = URLEncoder.encode(decodedParam, "UTF-8");

这里的"UTF-8"是编码时使用的字符集。

6. 完整代码示例

下面是一个完整的示例,展示了如何解决Java GET传参乱码问题:

import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String paramName = request.getParameter("paramName");
        String decodedParam = URLDecoder.decode(paramName, "UTF-8");
        String encodedParam = URLEncoder.encode(decodedParam, "UTF-8");
        
        // 输出解码和编码后的参数
        System.out.println("Decoded param: " + decodedParam);
        System.out.println("Encoded param: " + encodedParam);
        
        // 其他处理逻辑
        // ...
    }
    
}

7. 总结

通过以上步骤,我们可以解决Java GET传参乱码问题。首先获取GET请求中的参数,然后进行URL解码和编码,最后得到正确的参数值。在解码和编码过程中,我们需要指定正确的字符集,一般情况下都使用UTF-8。

希望本文能够帮助到刚入行的小白。如果还有其他问题,欢迎提问。

stateDiagram
    [*] --> 获取GET请求中的参数
    获取GET请求中的参数 --> 对参数进行URL解码
    对参数进行URL解码 --> 对参数进行编码
    对参数进行编码 --> [*]
pie
    title 解码和编码所用字符集
    "UTF-8" : 70
    "其他字符集" : 30

参考资料

  • [URLDecoder (Java SE 11 & JDK 11 )](
  • [URLEncoder (Java SE 11 & JDK 11 )](