问题描述
我试图了解编码和解码文本时可用的不同字符集的区别和重要性。
我有一个场景,我想在其中调用 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 (将#修改为@)