示例参考:
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class URLEncodeChineseInQueryString {
public static Map<String, String> parseQueryParameters(String queryString) {
Map<String, String> queryParams = new HashMap<>();
Pattern pattern = Pattern.compile("([^&=]+)=([^&]*)");
Matcher matcher = pattern.matcher(queryString);
while (matcher.find()) {
queryParams.put(matcher.group(1), matcher.group(2));
}
return queryParams;
}
// 这个方法用于对查询字符串中的中文进行编码
public static String encodeChineseInQueryString(String queryString) {
// 解析查询字符串为Map
Map<String, String> queryParams = parseQueryParameters(queryString);
// 对每个参数的值进行编码
for (Map.Entry<String, String> entry : queryParams.entrySet()) {
try {
String encodedValue = URLEncoder.encode(entry.getValue(), "UTF-8");
queryParams.put(entry.getKey(), encodedValue);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
// 重新构建查询字符串
StringBuilder encodedQueryString = new StringBuilder();
for (Map.Entry<String, String> entry : queryParams.entrySet()) {
if (encodedQueryString.length() > 0) {
encodedQueryString.append('&');
}
encodedQueryString.append(entry.getKey()).append('=').append(entry.getValue());
}
return encodedQueryString.toString();
}
public static void main(String[] args) {
String queryString = ".../download?fileName=测试中文.xlsx&url=/file/123456测试中文.xlsx";
String encodedQueryString = encodeChineseInQueryString(queryString);
System.out.println(encodedQueryString);
}
}