【问题标题】:Request.getParameter is wrongly decoding the stringRequest.getParameter 错误地解码了字符串
【发布时间】:2020-02-04 03:30:39
【问题描述】:

我有带有以下查询字符串的 URL

equipmentAccessoryRoute=LFVR+BASICACC

当我执行request.getParameter("equipmentAccessoryRoute") 时,它会在字符串变量中返回“LFVR BASICACC”,将加号替换为空格。

为了解决这个问题,我做了这样的事情

String accessoryRoute = java.net.URLEncoder.encode(request.getParameter("equipmentAccessoryRoute"),"UTF-8");

它工作得很好,但现在它不适用于以下查询字符串(以前可以工作)

`equipmentAccessoryRoute=C1000IP5EL@-A`

解码将其转换为“C1000IP5EL%40-A”并存储为字符串。

我真的很困惑。我尝试学习 URL 编码,但发现它很难理解。

【问题讨论】:

标签: java query-string urlencode


【解决方案1】:

URL - 统一资源定位符

  • 只能使用 ASCII 通过 Internet 发送 URL 字符集。由于 URL 通常包含 ASCII 以外的字符 设置后,必须将 URL 转换为有效的 ASCII 格式。
  • URL 编码将不安全的 ASCII 字符替换为“%”,后跟 两个十六进制数字。
  • URL 不能包含空格。 URL 编码通常会替换一个空格 带有加号 (+) 或带有 %20。

希望这会有所帮助。

【讨论】:

  • 但是为什么加号要转换成空格呢?
  • + 符号将被 UTF-8 中的 %2B 替换,空格将被转换为 %20 或 + 符号,但通常空格会被转换为 %20。
  • 问题是关于 URL 参数,它们的编码方式不同。
  • @user207421 这就是我向他解释的,URL 只能使用 ASCII 字符集通过 Internet 发送。那有什么问题?
猜你喜欢
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 2012-11-25
  • 1970-01-01
相关资源
最近更新 更多