0

+对 URIBuilder 中的字符(可能还有其他字符)有问题,假设要获取解码的 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是正确的,但我必须剥离它。还有另一种方法吗?

4

2 回答 2

2

以不同的方式使用它:

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

于 2015-03-26T08:55:58.563 回答
1

那是因为如果你在 url 中发送空间作为参数,它被编码为+. 发生这种情况是因为有一些规则在 URL 中哪些字符是有效的。请参阅URL RFC

必须使用“%”字符后跟两个十六进制数字的标准约定对 URL 中不允许的任何字符进行编码,包括空格和其他不在允许字符集中的二进制数据。

如果您想+在 url 中有符号,则需要将其编码为%2B. 例如2+2被编码为2%2B2和。因此,在您的情况下,我相信您必须将结果正确解码为.i ami+amAZrhQaTRSiys5GZtlwZ+H3qUyIYAZrhQaTRSiys5GZtlwZ H3qUyIY

于 2015-03-26T08:51:07.460 回答