【问题标题】:Special characters in URL java not workingURL java中的特殊字符不起作用
【发布时间】:2017-12-26 03:45:36
【问题描述】:

我正在制作一个从英雄联盟 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=(我的密钥,不能显示它)

我之前遇到过空格,因为看起来你甚至不能在 url 中放置空格,所以我为解决这个问题所做的事情是:

newPlayerNick[i] = playerNick[i].replaceAll("\\s+","_");

这基本上用 _ 替换了每个空格,所以效果很好,但我不能用普通的“a”替换“å”,因为它们是不同的字符。

那么,您知道任何解决方案吗?非常感谢你们。

【问题讨论】:

  • URL 可以包含 ASCII 子集之外的字符。 URL 中的任何非 ASCII 字符都是非标准的。一些网络服务器可能偶然支持它(我相信 Github 偶尔会在 URL、IIRC 中抛出一个杂散的复选标记),一些网络客户端可能允许它,但它是非标准的。 Related.
  • 你试过 URLEncoderURLDecoder 吗? here你可以看到一个很好的例子

标签: java url special-characters encode http-status-code-400


【解决方案1】:

您可以尝试对特殊字符进行 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链接并且关键字被传递了

【讨论】:

  • 很高兴为您提供帮助。 :)
猜你喜欢
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多