Java UTF-8 URLEncoder 对不应编码的特殊字符进行编码

3

我正在尝试在我的移动应用程序登录时对用户名和密码进行编码。 我连接到现有的API,并且应该发送编码后的用户名和密码。 我正在使用URLEncoder和UTF_8进行编码,但它似乎会将大多数特殊字符进行编码。 我正在将所编码的字符串与由Postman编码的字符串(这是正确版本)进行比较。

以下是我的代码:

URLEncoder.encode(value, StandardCharsets.UTF_8.toString());

对于字符串~!@#$%^&*()_+{}|:<>?"`[]\;',./

在Postman中,它被编码为

~!%40%23%24%25%5E%26*()_%2B%7B%7D%7C%3A%3C%3E%3F%22%60%5B%5D%5C%3B'%2C.%2F

在我的应用中,它正在被编码为

%7E%21%40%23%24%25%5E%26*%28%29_%2B%7B%7D%7C%3A%3C%3E%3F%22%60%5B%5D%5C%3B%27%2C.%2F

正如您所看到的,它会对大部分特殊字符进行编码(例外情况包括“._*”)。

1个回答

4
使用静态常量UTF_8toString()方法作为字符编码方案会抛出java.nio.charset.IllegalCharsetNameException: java.nio.charset.CharsetICU[UTF-8]异常,因为toString()返回的是"java.nio.charset.CharsetICU[UTF-8]"。要获取所需的"UTF-8",请改用displayName()方法。 这样更改后,您的代码将在我的环境中按照您的预期工作。

嗨。我的代码没有像那样抛出异常。我刚刚尝试了displayName()方法,结果仍然是一样的。 - majozu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接