所以我尝试着把一个可以工作的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中它只使用了双引号,所以我不知道这是否会有区别。
谢谢您!
1条答案
按热度按时间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