为什么 urlEncoder.encode 不能像其他人一样工作?

why can't urlEncoder.encode work like everyone else?

我不得不像这样做愚蠢的事情来让 urlEncoding 像其他库(iOS、Javascript..)一样工作,因为 java.net.URLEncoder 是否有问题写入标准编码:

URLEncoder.encode(normalizeString(str), StandardCharsets.UTF_8.displayName())
                    .replace("+", "%20")
                    .replace("%40", "@")
                    .replace("*", "%2A");

+* 不是百分比编码,而 @ 是。并且...现在它正在编码正斜杠 /。卧槽!对此有很好的解释吗?我使用了错误的字符集吗?

我认为您误解了 URLEncoder. The UrlEncoder implements the HTML Specifications 对如何以 HTML 形式编码 URL 的作用。

对于您的情况,我认为库 org.apache.commons.text 可能是更好的解决方案。它为您提供了转义字符的方法。