如何在Java中对数据进行url编码

2024-05-19 08:35:56 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我正在尝试将一个工作的python代码翻译成Java。所需的步骤之一是对数据进行url编码。但是,当我用Java编码数据时,它看起来与用Python编码的数据不同

在一段Python代码中,有这样一段代码:

    data = {'request-json': json}
    print('Sending form data:', data)

    data = urlencode(data)
    data = data.encode('utf-8')

    print('Sending data:', data)

输出

Sending form data: {'request-json': '{"apikey": "xewpjipcpovwiiql"}'}

编码后的输出

Sending data: b'request-json=%7B%22apikey%22%3A+%22xewpjipcpovwiiql%22%7D'

这就是我在Java中要做的。正如您可以想象的那样,Java更为复杂。我使用gson转换为Json

    Gson gson = new Gson();
    
    API_Key key = new API_Key("xewpjipcpovwiiql");
    String jsonInputString = gson.toJson(key);
    
    Data data = new Data(key);
    String request_form = gson.toJson(data);
    
    System.out.println(request_form);
    String urlencoded = URLEncoder.encode(request_form,StandardCharsets.UTF_8);
    
    System.out.println(urlencoded);

输出:

Sending form data: {"request-json":{"apikey":"xewpjipcpovwiiql"}}

编码字符串的输出:

%7B%22requestjson%22%3A%7B%22apikey%22%3A%22xewpjipcpovwiiql%22%7D%7D

所以它们看起来不一样,那么为什么它们会不同呢?如何在Java中获得相同的python编码字符串?我注意到在Python中它使用了单引号和双引号的组合,而在Java中它只使用了双引号,所以我不知道这是否有区别

谢谢大家!


Tags: 数据key代码formjson编码newdata
1条回答
网友
1楼 · 发布于 2024-05-19 08:35:56

在Python方面:data.encode('utf-8')调用是不必要的,或者至少文档描述的意图与此使用https://docs.python.org/3/library/stdtypes.html#str.encode不同(这就是为什么在beggining中有一个b')。 缺少外括号,因为它将请求json解释为URL参数名(如果在json的顶部/第一个属性级别添加第二个属性,可能更容易理解,您将看到以request-json=%7B%22apikey%22%3A+%22xewpjipcpovwiiql%22%7D&second-property=<second-property-value>结尾)

在Java方面:request_form被完全解释为要编码的单个值,因此您可以将编码后的值作为URL中某个参数的一部分,如:https://host:port?some-parameter-name=%7B%22requestjson%22%3A%7B%22apikey%22%3A%22xewpjipcpovwiiql%22%7D%7D

相关问题 更多 >

    热门问题