【问题标题】:Java UTF-8 URLEncoder encoding special characters that it shouldn'tJava UTF-8 URLEncoder 编码不应该的特殊字符
【发布时间】:2019-07-24 14:31:53
【问题描述】:

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

这是我的代码:

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

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

在邮递员中它被编码为

~!%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

如您所见,它正在编码大多数特殊字符(例外是 ._*)

【问题讨论】:

    标签: java android


    【解决方案1】:

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

    之后更改您的代码就像您在我的环境中想要的那样工作。

    【讨论】:

    • 嗨。我的代码没有抛出这样的异常。我刚刚尝试了 displayName() 方法,结果还是一样
    猜你喜欢
    • 1970-01-01
    • 2011-01-18
    • 2020-09-20
    • 2014-02-14
    • 2011-02-21
    • 2019-07-22
    • 2016-05-24
    • 1970-01-01
    • 2012-10-29
    相关资源
    最近更新 更多