【发布时间】:2019-03-03 22:40:45
【问题描述】:
我正在尝试在 Java 中创建一个 URI,其中我的查询字符串中有一个 :。但是,无论我如何尝试创建 URI,都会得到无效响应。
new URI("http", "localhost:1181", "/stream.mjpg", "part1:part2", null).toString(); 给我
http://localhost:1181/stream.mjpg?part1:part2,查询字符串中的 : 没有被转义。
如果我在创建 URI 之前转义查询字符串,它会转义 %3A 中的 %,得到 %253A,这是不正确的。
new URI("http", "localhost:1181", "/stream.mjpg", "part1%3Apart2", null).toString(); 给
http://localhost:1181/stream.mjpg?part1%253Apart2
我的结果需要是http://localhost:1181/stream.mjpg?part1%3Apart2,因为我的服务器需要在查询字符串中编码:`
是我遗漏了什么,还是我必须手动创建查询字符串?
【问题讨论】:
-
对我来说打印正确的是“localhost:1181/stream.mjpg?part1:part2”。使用 java.net 包中的 Java 8 和 URI。请问你用的是什么版本的java和包?
-
这是不正确的。我需要我的结果是
http://localhost:1181/stream.mjpg?part1%3Apart2。我编辑了我的帖子来添加这个,因为我意识到我已经忘记了。 -
“因为我的服务器要求
:编码在查询字符串中”你能分享一下你使用的是什么服务器吗? -
好吧,URI 看不到任何需要在 query 部分中编码
:,因为它不代表 URI 的那个或以后的部分中的任何元字符。解决方法是在没有查询的情况下创建 URI,将其转换为字符串,然后手动添加编码的键和值。 -
@PariNgang
:保留在 URI 中,但不在 所有 部分中。它在scheme://user:password@address.of.server:port中保留,但之后不再特殊,因此/path可以包含它,与?query=val或#fragment相同,这就是URI 构造函数不对其进行编码的原因。