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

ejk8hzay  于 2022-11-06  发布在  Java
关注(0)|答案(1)|浏览(242)

所以我尝试着把一个可以工作的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)

输出
正在发送表单数据:{“请求json”:“{“apikey”:“xewpjipcpovwiiql”}'}
编码后的输出
正在发送数据:“请求-json = %7B%22apkey%22%3A +%22xewpjipcpovwiql%22%7D”“请求-json = %7B%22apkey%22%3A +%22xewpjipcpovwiql%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);

输出:
正在发送表单数据:{“请求-json”:{“apkey”:“xewpjipcpovwiiql”}}
编码字符串的输出:
请求的每个关键字
所以它们看起来不一样,那么为什么它们会不同呢?我如何在Java中获得相同的python编码字符串?我注意到在Python中它使用了单引号和双引号的组合,而在Java中它只使用了双引号,所以我不知道这是否会有区别。
谢谢您!

lmvvr0a8

lmvvr0a81#

在Python方面:data.encode('utf-8')调用是不必要的,或者至少文档描述的意图与此使用www.example.com不同https://docs.python.org/3/library/stdtypes.html#str.encode(这就是为什么在开头有一个b ')。(如果您在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

相关问题