URIBuilder的setParameter方法在添加参数时使用"+"代替"%20"来表示空格。

9
我将使用URIBuilder构建URL,但是出现了一个问题:空格被替换成了+而不是%20。
这是我的代码:
            URI uri=null;
            try {
                uri = ub.setScheme("http")
                        .setHost("myalcoholist.com")
                        .setPath("/drink-management/view-drink-json")
                        .setParameter("flavor",(String)params[1])
                        .setParameter("brand",(String)params[2])
                        .setParameter("company",(String)params[3])
                        .build();
            } catch (URISyntaxException e) {
                Log.e("url", "could not parse url", e);
                return null;
            }

参数:

params[3] = {java.lang.String@831933398520}"contreau france."
params[2] = {java.lang.String@831933398384}"cointreau"
params[1] = {java.lang.String@831933398256}"orange"

结果URL:

"GET /drink-management/view-drink-json?flavor=orange&brand=cointreau&company=contreau+france. HTTP/1.1" 200 538 "-" "Apache-HttpClient/UNAVAILABLE (java 1.4)"

我需要更改哪些参数才能正确编码?谢谢。

1
你为什么认为在查询参数中使用 + 作为空格的编码是无效的呢?(至少在HTTP协议中是有效的...) - Jon Skeet
1
这是哪个UriBuilder类呢?我相信周围有多个... - Jon Skeet
顺便说一下,我并不是在暗示使用%20无效。 - Jon Skeet
org.apache.http.client.utils.URIBuilder - ufk
1个回答

2

我知道这篇文章很老,但是既然这是谷歌给我的第一个结果并且没有答案,那么我来告诉大家解决问题的方法:

只需使用 URLEncoder.encode(string, "UTF-8"),其中 string 是你想要进行此更改的字符串。这将把字符串中的所有字符编码为 UTF-8 格式的 URL。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接