我正在制作一个从英雄联盟 API 获取数据的程序,它会分析您当前的游戏并向您显示对手的姓名、排名等信息。但我有一个问题,因为要获得某人的排名,我需要访问带有他的昵称的特定网址。问题是,有些玩家将诸如 å、à、è、ö 之类的字符放在他们的昵称中,当这种情况发生时,我的程序就会停止工作。我将向您展示我用来执行此操作的部分代码:
getSummonerID2 = new JSONObject(IOUtils.toString(newURL("https://euw1.api.riotgames.com/lol/summoner/v3/summoners/by-name/"+ newPlayerNick[i] + "?api_key=" + APIKEY), Charset.forName("UTF-8")));
这是它抛出的错误: java.io.IOException:服务器返回 HTTP 响应代码:400 对于 URL:https://euw1.api.riotgames.com/lol/summoner/v3/summoners/by-name/JegFårDetDårligt?api_key= (我的 key ,抱歉,无法显示)
我以前就遇到过空格问题,因为看起来你甚至不能在网址中添加空格,所以我解决这个问题的方法是:
newPlayerNick[i] = playerNick[i].replaceAll("\\s+","_");
这基本上用 _ 替换每个空格,所以它工作得很好,但我不能用普通的“a”替换“å”,因为它们是不同的字符。
那么,你知道有什么解决办法吗?非常感谢你们。
最佳答案
您可以尝试对特殊字符进行 URL 编码:
URLEncoder.encode("This string has å à è ö and spaces","UTF-8")
输出如下:
This+string+has+%C3%A5+%C3%A0+%C3%A8+%C3%B6+and+spaces
您可以尝试此网址看看是否有效:
https://www.google.com.hk/search?q=This+string+has+%C3%A5+%C3%A0+%C3%A8+%C3%B6+and+spaces
可以看到这是一个google链接,并且传递了关键字
关于java - URL java 中的特殊字符不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47973688/