我有一个URL,我想用java应用来解析。这些URL可以有字符,但不能用.NET Framework来调用。
url.openStream()
比如说。
https://en.wikipedia.org/w/api.php?format=json&action=query&prop=langlinks&titles=2019–20_coronavirus_pandemic&redirects=&lllimit=400
其中有一个字符 - (2019-20_冠状病毒_大流行),我必须对其进行编码。我想对完整的URL进行编码,因为它可能有其他特殊字符。
我的做法如下,这对我来说是行不通的。
String urlEncoded = URLEncoder.encode(wikiID, StandardCharsets.UTF_8.toString());
String sURL = "https://en.wikipedia.org" + "/w/api.php?format=json&action=query&prop=langlinks&titles=" + urlEncoded + "&redirects=&lllimit=400";
URL url = new URL(sURL);
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
URLEncoder.encode编码2019-20到2019%3F20,这是不正确的,resp. 不能被调用.正确的编码应该是:2019%E2%80%9320。
如何通过代码正确编码url?
你的变量 wikiID
在上面的代码运行时,已经损坏了。 因此,问题出在你没有给我们看的代码中。
为了证明这一点,这里有一个在jshell中的快速会话。 我在Windows上,所以我使用了Unicode字符转义符 \u2013
烯字的。
jshell> import java.net.URLEncoder;
jshell> import java.nio.charset.StandardCharsets;
jshell> URLEncoder.encode("2019\u20132020_coronavirus_pandemic", StandardCharsets.UTF_8.toString());
$3 ==> "2019%E2%80%932020_coronavirus_pandemic"
jshell> URLEncoder.encode("2019?2020_coronavirus_pandemic", StandardCharsets.UTF_8.toString());
$4 ==> "2019%3F2020_coronavirus_pandemic"