Java UTF-8 URLEncoder 编码它不应该的特殊字符

标签 java android

我在登录我的移动应用程序时尝试对用户名和密码进行编码。我正在连接到一个现有的 API,并且应该发送一个编码的用户名和密码。我正在使用 UTF_8 使用 URLEncoder,但它似乎正在对大多数特殊字符进行编码。我正在将编码的字符串与 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

如您所见,它正在对大多数特殊字符进行编码(异常(exception)情况是 ._*)

最佳答案

使用静态常量UTF_8toString()方法作为字符编码方案会抛出java.nio.charset.IllegalCharsetNameException: java.nio.charset .CharsetICU[UTF-8] 作为 toString() 返回“java.nio.charset.CharsetICU[UTF-8]”。要获得所需的“UTF-8”,请改用 displayName() 方法。

在那之后,你的代码在我的环境中就像你想要的那样工作。

关于Java UTF-8 URLEncoder 编码它不应该的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57159080/

相关文章:

android - 摩托罗拉仿生 - 输入类型 textPersonName 和 textCapWords 不工作

java - 集成pdk(pinterest sdk)时出错

android - Bottom Sheet 向下滑动行为

java - 如何平滑地执行放大和缩小以及在 TEXTVIEW 上的特定缩放位置进行缩放?

android - 如何通过显式创建 AndroidManifest.xml 来创建 android 应用程序?

android - 默认的 Android Studio 抽屉导航图标

java - Tomcat 缓存下载的文件

java - 如何在更改 EditText 和 Seekbar 时自动更改 TextView

java - 如何将数据参数从 Java 代码发送到 HTML?

java - 使用 jpa 进行多次更新