如何对以下URL进行正确编码

问题描述 投票:0回答:1

我有一个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?

java url encoding
1个回答
0
投票

你的变量 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"
© www.soinside.com 2019 - 2024. All rights reserved.