我的REST资源(使用Jersey)使用QueryParam接收IPv6地址。
当接收到的地址值在资源中,它的一些字符是编码的,不知道用哪种算法。
例如,地址: fe80::bce8:a33e:2c56:d48a%13
如下所示:
在调试中,它看起来像fe80::bce8:a33e:2c56:d48a\u00
但打印时: fe80::bce8:a33e:2c56:d48a
我知道'\u00‘被翻译成空格,但是为什么会发生这种情况呢?我该如何克服这个问题呢?有没有办法解码它?
谢谢
发布于 2013-01-29 17:42:48
根据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-28 16:12:40
IPv6地址由八个带有七个分隔符的四位十六进制字符组成
因此,您需要独立地将十六进制字符转换为整数。
发布于 2013-01-28 19:03:18
原因之一似乎是您使用了本地链路地址(以fe80:开头的地址)。因为每个链接都有这些地址,所以地址需要包括您所指的链接的规范。这是您看到的%13部分。如果该字符串被解析为URL编码字符串,则%13将成为DC3控制代码(十六进制数为0x13)。
我不知道QueryParam,但这似乎是个bug。IP地址不是URL编码的,所以它不应该尝试解码它们...
https://stackoverflow.com/questions/14557880
复制相似问题