You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何对RaiderIO API请求的特殊字符进行URL编码?

解决Java中RaiderIO API的特殊字符URL编码问题

嘿,我之前对接RaiderIO API的时候也碰到过一模一样的问题!当玩家名称包含像ø、ì这类非ASCII特殊字符时,直接拼接URL肯定会请求失败——因为HTTP要求这类字符必须转换成URL编码格式(也就是百分号加十六进制的形式)。

在Java里,你可以直接用JDK自带的URLEncoder类来搞定这个需求,关键是要指定UTF-8编码(RaiderIO API明确支持UTF-8编码的参数)。

问题出在哪?

你当前的代码是直接把未编码的参数拼接到URL里,比如name=Børomìr,但HTTP协议无法正确识别这些特殊字符,必须转成name=B%C3%B8rom%C3%ACr这种格式。

修改后的代码示例

你需要对每个参数值单独进行URL编码,而不是对整个URL编码(否则会把http://、&这些关键符号也编码掉,导致请求无效)。这里是调整后的代码:

import java.net.URLEncoder;
import java.net.URL;
import java.net.URLConnection;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;

public class RaiderIOApiClient {
    public static void main(String[] args) throws Exception {
        String region = "US";
        String realm = "zuljin";
        String name = "Børomìr";
        
        // 对每个参数单独做UTF-8编码
        String encodedRegion = URLEncoder.encode(region, "UTF-8");
        String encodedRealm = URLEncoder.encode(realm, "UTF-8");
        String encodedName = URLEncoder.encode(name, "UTF-8");
        
        // 拼接成正确的URL
        String urlString = "https://raider.io/api/v1/characters/profile?region=" + encodedRegion 
                + "&realm=" + encodedRealm 
                + "&name=" + encodedName 
                + "&fields=mythic_plus_best_runs%3Aall";
        
        URL url = new URL(urlString);
        System.out.println("编码后的URL: " + url.toString());
        
        URLConnection uc = url.openConnection();
        uc.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
        InputStream in = uc.getInputStream();
        String encoding = uc.getContentEncoding();
        encoding = encoding == null ? "UTF-8" : encoding;
        String body = IOUtils.toString(in, encoding);
        
        // 处理返回结果
        System.out.println("API返回内容: " + body);
    }
}

关键注意事项

  • 必须指定UTF-8编码:URLEncoder.encode()方法如果不指定编码,在不同Java版本中默认编码可能不一样,会导致编码结果不符合RaiderIO的要求。
  • 只编码参数值:不要对整个URL字符串编码,否则URL中的协议、域名、参数分隔符(&、?)都会被错误编码,导致请求地址无效。
  • 验证编码结果:比如Børomìr经过UTF-8编码后会变成B%C3%B8rom%C3%ACr,完全符合你提供的正确示例格式。

这样修改后,你的API请求就能正确处理包含特殊字符的玩家名称了!

内容的提问来源于stack exchange,提问作者Wesos de Queso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:05:21