Java GET请求中param中有中文

简介

在Java Web开发中,我们经常需要发送GET请求来获取数据。GET请求通常使用URL中的参数来传递数据,但是如果参数中含有中文字符,可能会出现乱码或无法正确解析的问题。本文将介绍如何处理Java GET请求中param中含有中文字符的问题,并提供相应的代码示例。

GET请求和URL编码

GET请求是一种用于从服务器获取数据的HTTP方法。在GET请求中,参数通常是通过URL的查询字符串(query string)来传递的,即将参数附加在URL的末尾。例如,下面是一个包含两个参数的GET请求的URL示例:


URL中的参数需要进行URL编码,以确保特殊字符被正确传递。URL编码使用百分号(%)加上两位十六进制数来表示特殊字符。例如,空格被编码为"%20",中文字符被编码为"%E4%BD%A0%E5%A5%BD"。

Java中的URL编码和解码

Java提供了用于对URL进行编码和解码的类java.net.URLEncoderjava.net.URLDecoder

  • java.net.URLEncoder用于URL编码,将字符串转换为符合URL规范的编码格式。
  • java.net.URLDecoder用于URL解码,将编码后的字符串还原为原始字符串。

下面是Java中URL编码和解码的示例代码:

import java.net.URLEncoder;
import java.net.URLDecoder;

public class URLEncodingExample {
    public static void main(String[] args) {
        try {
            String originalString = "中文";
            String encodedString = URLEncoder.encode(originalString, "UTF-8");
            System.out.println("Encoded string: " + encodedString);
            
            String decodedString = URLDecoder.decode(encodedString, "UTF-8");
            System.out.println("Decoded string: " + decodedString);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行以上代码将输出:

Encoded string: %E4%B8%AD%E6%96%87
Decoded string: 中文

可以看到,URLEncoder.encode方法将中文字符串编码为"%E4%B8%AD%E6%96%87",URLDecoder.decode方法将编码后的字符串还原为原始字符串"中文"。

处理中文参数的GET请求

在处理中文参数的GET请求时,我们需要先对参数进行URL编码,然后将编码后的参数附加在URL的末尾。以下是一个使用java.net.URLEncoder来处理中文参数的GET请求的示例代码:

import java.net.URLEncoder;

public class GetRequestExample {
    public static void main(String[] args) {
        try {
            String baseUrl = "
            String param1 = "中文";
            String param2 = "value2";
            
            String encodedParam1 = URLEncoder.encode(param1, "UTF-8");
            
            String url = baseUrl + "?param1=" + encodedParam1 + "&param2=" + param2;
            
            System.out.println("GET request URL: " + url);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行以上代码将输出:

GET request URL: 

可以看到,中文参数"中文"经过URL编码后,被转换为"%E4%B8%AD%E6%96%87",然后附加在URL的末尾。

在接收到带有中文参数的GET请求时,我们需要对参数进行URL解码,以获取原始的中文字符串。以下是一个使用java.net.URLDecoder来解码中文参数的GET请求的示例代码:

import java.net.URLDecoder;

public class ReceiveRequestExample {
    public static void main(String[] args) {
        try {
            String url = "
            
            String[] params = url.split("\\?");
            String queryString = params[1];
            
            String[] keyValuePairs = queryString.split("&");
            for (String keyValue : keyValuePairs) {
                String[] pair = keyValue.split("=");
                String key = pair[0];
                String value = URLDecoder