You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中实现与Python一致的URL编码效果?

问题原因分析

你的问题核心在于Python和Java代码实现的逻辑完全不同,和单双引号无关:

Python的执行流程

  1. 你构造了一个字典data = {'request-json': json},这里的json是一个已经序列化好的JSON字符串(比如实际值是'{"apikey": "xewpjipcpovwiiql"}')。
  2. urlencode(data)的作用是把键值对字典转换成application/x-www-form-urlencoded格式:它会分别对键(request-json)和值(那个JSON字符串)进行URL编码,然后用=拼接,最终得到request-json=%7B%22apikey%22%3A+%22xewpjipcpovwiiql%22%7D。
  3. 最后data.encode('utf-8')只是把字符串转成字节数组,不影响编码结果。

Java的错误逻辑

你现在的Java代码是:

  1. 把Data对象直接序列化成了一个完整的JSON字符串:{"request-json":{"apikey":"xewpjipcpovwiiql"}}。
  2. 然后对整个JSON字符串做URL编码,相当于把整个大括号、嵌套结构都当成了一个值来编码,结果自然和Python完全不同。
解决方案:模拟Python的urlencode行为

要在Java中得到和Python一致的结果,你需要复刻Python的键值对编码逻辑,而不是编码整个JSON:

import com.google.gson.Gson;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

public class Main {
    static class API_Key {
        private String apikey;
        public API_Key(String apikey) {
            this.apikey = apikey;
        }
        // Gson可以直接访问私有字段,无需额外Getter/Setter
    }

    public static void main(String[] args) {
        Gson gson = new Gson();
        API_Key key = new API_Key("xewpjipcpovwiiql");
        
        // 第一步:把API_Key序列化成JSON字符串(对应Python里的json变量)
        String jsonValue = gson.toJson(key);
        
        // 第二步:模拟Python的urlencode——分别编码键和值,再拼接成key=encoded_value
        String encodedKey = URLEncoder.encode("request-json", StandardCharsets.UTF_8);
        String encodedValue = URLEncoder.encode(jsonValue, StandardCharsets.UTF_8);
        String finalEncodedData = encodedKey + "=" + encodedValue;
        
        System.out.println("Sending data: " + finalEncodedData);
    }
}

这段代码的输出会和Python完全一致:

Sending data: request-json=%7B%22apikey%22%3A%22xewpjipcpovwiiql%22%7D
额外说明
  • 关于空格:Python的urlencode默认会把空格转成+,Java的URLEncoder.encode也是如此(符合application/x-www-form-urlencoded规范),所以不需要额外处理。
  • 单双引号的问题:Python输出里的"是HTML转义的显示结果,实际代码中Python的字符串是用单引号包裹双引号的JSON,而Java的Gson生成的是双引号的JSON,这不会影响URL编码结果——因为URL编码只关心字符本身,只要是相同的字符,编码结果就一致。

内容的提问来源于stack exchange,提问作者Crimson Space

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 05:17:33