java - 如何正确编码以下 URL
问题描述
我有一个我喜欢通过 java 应用程序解析的 URL。这些 url 可以包含字符,这些字符不能被调用:
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_coronavirus_pandemic),我必须对其进行编码。响应。我想对完整的 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,这是不正确的,分别。无法调用。正确的编码是: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"
推荐阅读
- fastapi - FastAPI:CORS 中间件不使用 GET 方法
- flutter - 带有自定义图标字体类的黄金测试
- assembly - 在 ARMv7a 上与 Neon 进行 64 位签名比较支持 CMGT 的最有效方法是什么?
- c# - c# core Microsoft.Extensions.Logging 和日志配置
- typescript - 打字稿中合并对象的类型应该是什么?
- python - 2个数据帧之间的经度和纬度距离计算
- c# - 表单数据未绑定到具有泛型类型的视图模型
- php - 如何在 nodejs 服务器中检查带有数字类型的 PHP MD5 哈希
- amazon-web-services - 从步骤函数调用中获取所有 Lambda 执行 ID
- swiftui - 是否可以垂直翻转 SwiftUI 视图?