如何在Java中将字符串转换为x-www-form-urlencoded?

时间:2018-07-09 14:36:41

标签: java

我有一个字符串

"To=\"+911234567899\"&From=\"+9987654321\"&Body=\"Hen\""

我需要将其转换为x-www-form-urlencoded格式。

如果我在Java中使用URLEncoder.encode(),则该函数会将字符串转换为

To%3D%22%2B911234567899%22%26From%3D%22%2B9987654321%22%26Body%3D%22Hen%22

但是当我以x-www-form-urlencoded的形式发送邮递员的请求时,得到发送的请求就是

To=%22%2B911234567899%22&From=%22%2B9987654321%22&Body=%22Hen%22

为什么会有这种区别?我还需要发送请求,因为它与邮递员(第二个编码的字符串)完全相同,然后只有我得到了响应。如何以第二种格式编码我的字符串?

1 个答案:

答案 0 :(得分:0)

您可能对字符串进行了双重编码。也许您不应该自己对查询字符串进行编码,而让URLEncoder为您完成工作。

这里是一个示例,假设我在哈希映射this.params中具有键和值。

this.params.put(key, URLEncoder.encode(value.toString(), "UTF-8")); // set the key/value

StringBuilder param = new StringBuilder("");
for (Map.Entry<String, Object> item : this.params.entrySet()) {
    if (param.toString().length() != 0) {
        param.append('&');
    }
    param.append(item.getKey());
    param.append('=');
    param.append(item.getValue().toString());
}

现在param.toString()将被正确编码。与url + "?" + param.toString()

一起使用