因此,我正在尝试将一个工作的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中它只使用了双引号,所以我不知道这是否有区别
谢谢大家!
在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
相关问题 更多 >
编程相关推荐