【问题标题】:Java URLDecoder decode Percentage Symbol as errorJava URLDecoder 将百分比符号解码为错误
【发布时间】:2021-10-19 08:08:10
【问题描述】:

我需要允许用户输入各种特殊字符,所以我使用了 java URLDeacoder.decode() 方法,我使用 println 进行了测试。除此百分比符号外,其他特殊字符没有问题,执行时出错。这是为什么?我知道 % 被用于 URL 编码,是这个原因吗?

java.lang.IllegalArgumentException: URLDecoder: 不完整的尾随转义 (%) 模式

System.out.println(URLDecoder.decode("%", "UTF-8"));

【问题讨论】:

  • 百分比是编码值的开头,您也需要该值。例如,%20 是一个空格。
  • @ElliottFrisch 是的,我注意到了,但是有什么解决方法可以让用户输入 % 吗?
  • 定义“特殊字符”。请注意,URLDecoder 用于解码 application/x-www-form-urlencoded̀ 数据,这可能不是您想要的。
  • @fge 那些可以在键盘上找到的非字母数字字符

标签: java urldecode


【解决方案1】:

尽管有它们的名字,URLEncoder/Decoder 用于编码 POST 参数,而不是 URL。请参阅下面@fge 的评论。

对 URL 进行编码的方法是使用 URL 和 URI 类。

我很好奇您最初是如何获得未解码的 URL 的。

【讨论】:

  • 实际上,我没有用它来解码 URL,我用它来解码来自文本字段的用户输入,因为如果用户输入这些字符!@#$%^&*(),它将存储为数据库中未解码的值,如 %26 等
  • 那么你就完全回到了前面。您正在寻找的过程是编码,而不是解码。
  • 不,我的意思是,当用户输入 % 时,我希望将其作为 % 存储在数据库中,但相反,它在数据库中存储为 %26,这是我不想要的.
  • 那么在文本字段和数据库之间肯定发生了一些你没有告诉我们的其他过程。不清楚你在问什么。
  • "URLEncoder/Decoder 用于编码 URL 参数" application/x-www-form-urlencoded 数据,这并不完全相同。
【解决方案2】:

% 标记编码字符的开始。它后面应该跟一些 HEXA 十进制数。否则,它将抛出 IllegalArgumentsException 及其按预期工作,因为您没有在 % 之后指定十六进制小数。有关详细信息,请参阅http://www.w3schools.com/tags/ref_urlencode.asp。如果您期望输出为 '%',则必须这样做

System.out.println(URLDecoder.decode("%25", "UTF-8"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 2018-02-02
    相关资源
    最近更新 更多