我在 URI 上的字符+
(也许还有其他人(有问题,应该得到一个解码的 url,但是当我提取查询时,+
被替换
String decodedUrl = "www.foo.com?sign=AZrhQaTRSiys5GZtlwZ+H3qUyIY=&more=boo";
URIBuilder builder = new URIBuilder(decodedUrl);
List<NameValuePair> params = builder.getQueryParams();
String sign = params.get(0).getValue();
sing 的值是用空格而不是+
AZrhQaTRSiys5GZtlwZ H3qUyIY=
的。如何提取正确的值?
其他方式是:
URI uri = new URI(decodedUrl);
String query = uri.getQuery();
在这种情况下,查询的值sign=AZrhQaTRSiys5GZtlwZ+H3qUyIY=&more=boo
是正确的,但我必须剥离它。有没有其他方法可以做到这一点?
以不同的方式使用它:
String decodedUrl = "www.foo.com";
URIBuilder builder = new URIBuilder(decodedUrl);
builder.addParameter("sign", "AZrhQaTRSiys5GZtlwZ+H3qUyIY=");
builder.addParameter("more", "boo");
List<NameValuePair> params = builder.getQueryParams();
String sign = params.get(0).getValue();
addParameter 方法负责向构建器添加参数。构建器的构造函数应仅包含基 URL。
如果此 URL 按原样提供给您,则 + 已被解码并代表空格字符。如果您是生成此 URL 的人,则可能跳过了 URL 编码步骤(可以使用上面截取的代码完成(。
阅读一些有关 URL 编码的信息:http://en.wikipedia.org/wiki/Query_string#URL_encoding
如果您在 url 中将空格作为参数发送,它将编码为 +
.发生这种情况是因为有一些规则,哪些字符在 URL 中有效。请参阅 URL RFC。
必须使用"%"字符后跟两个十六进制数字的标准约定对 URL 中不允许的任何字符进行编码,包括不在允许的字符集中的空格和其他二进制数据。
如果你想在 url 中+
作为符号,你需要将其编码为 %2B
.例如,2+2
编码为 2%2B2
,i am
编码为 i+am
。所以在你的情况下,我相信你必须纠正结果,因为AZrhQaTRSiys5GZtlwZ+H3qUyIY
解码为AZrhQaTRSiys5GZtlwZ H3qUyIY
。