使用带有有效字符集的 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 (将#修改为@)