首页 > 解决方案 > 如何在 Java 中将字符串转换为 x-www-form-urlencoded?

问题描述

我有一个字符串

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

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

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

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

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

标签: java

解决方案


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

这是一个示例,假设我在 hashmap 中有键和值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()


推荐阅读