1

我的 REST 资源(使用 Jersey)使用 QueryParam 接收 IPv6 地址。

当资源中接收到地址值时,它的一些字符被编码了,不知道用的是什么算法。

例如,地址: [fe80::bce8:a33e:2c56:d48a%13]
如下所示:
在调试中它看起来像 [fe80::bce8:a33e:2c56:d48a\u00]
但是当它打印出来时: [ fe80::bce8:a33e:2c56:d48a]

我知道 '\u00' 被翻译成空白,但为什么会这样呢?我该如何克服呢?有没有办法解码它?

谢谢

4

3 回答 3

1

根据RFC2396

  Because the percent "%" character always has the reserved purpose of
  being the escape indicator, it must be escaped as "%25" in order to
  be used as data within a URI.

Jersey 无法理解这是否是保留字符。因此,在您的情况下,我相信您应该转义查询参数中的保留字符,然后它应该按预期工作:

[fe80::bce8:a33e:2c56:d48a%2513]
于 2013-01-29T09:42:48.053 回答
0

IPv6 地址由八个 4 位十六进制字符和七个 : 分隔符组成

因此您需要将十六进制字符独立地转换为整数。

于 2013-01-28T08:12:40.173 回答
0

原因之一似乎是您使用链接本地地址(以 fe80: 开头的地址)。因为每个链接都有这些地址,所以地址需要包含您所指的链接的规范。那就是您看到的 %13 部分。如果字符串被解析为 URL 编码字符串,则 %13 将成为 DC3 控制代码(十六进制数 0x13)。

我不知道 QueryParam,但这似乎是一个错误。IP 地址不是 URL 编码的,所以它不应该尝试解码它们......

于 2013-01-28T11:03:18.380 回答