微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用带有有效字符集的 Java 编码 URL 中的查询参数

如何解决使用带有有效字符集的 Java 编码 URL 中的查询参数

我试图了解编码和解码文本时可用的不同字符集的区别和重要性。

我有一个场景,我想在其中调用 RestAPI。 RestAPI 有一个基本 URL,例如:https://myrestapiurl.com。现在要执行 GET 请求,URL 是通过附加我想要获取的实体的 id 形成的,例如:https://myrestapiurl.com('id')

id :它对有效字符没有限制!

我遇到了一个id:باقی ریسورس,所以在调用RestAPI之前,我需要对它进行编码。使用 Java 的 URLEncoder,我尝试了以下操作:

 String s ="باقی ریسورس";
 String encodedID = URLEncoder.encode(s,StandardCharsets.UTF_8.name() )

使用编码 ID,我尝试使用 PostMan 发出请求。当我使用不同的字符集时,请求失败并显示 404 or 400。只有当我使用 ISO_8859_1 进行如下编码时它才会成功:

 String encodedID = URLEncoder.encode(s,StandardCharsets.ISO_8859_1.name());
 String URL = "https://myrestapiurl.com('" + encodedID + "')";

这很好用,通过代码和 PostMan。我的问题是:

如何在编码前决定使用哪个字符集? Or should I have fallbacks?也就是说,如果它因 UTF_8 then try with UTF_16 等而失败...但这非常低效。如果实体实际上不存在,那么这些尝试将是开销

此外,当我访问 https://www.w3schools.com/tags/ref_urlencode.ASP 并输入要编码的文本时,它提供了带有 ISO_8859_1 的有效编码字符串,它是如何做到的?

如何在不使用任何其他额外库(例如 apache)的情况下在 Java 中完成此操作?我们没有选择添加额外的依赖项!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。