嗨,我正在尝试通过 Retrofit 做一个简单的 http get 查询。

我的参数有一些特殊字符,似乎 url 编码失败。

原来的:

data=[out:json];node["name"~"Karlsruhe"]["place"~"city|village|town"];out body;

正确的编码应该是这样的:
data=%5Bout%3Ajson%5D%3Bnode%5B%22name%22~%22Karlsruhe%22%5D%5B%22place%22~%22city%7Cvillage%7Ctown%22%5D%3Bout%20body%3B

但改造创造了这个:
data=[out:json];node[%22name%22~%22Karlsruhe%22][%22place%22~%22city|village|town%22];out%20body;

这将失败:



这里可以做些什么来解决这个编码问题?
谢谢

最佳答案

我不确定编码错误的根本原因是什么,但是您可以使用 encoded 参数到 Query 表示法来解决它。将参数设置为 true 告诉改造参数已经编码,所以不要再次编码。

在您的服务接口(interface)中,将 encoded=true 添加到您的 @Query 注释中。就像是 -

Call<ResponseBody> getResponse(@Query(value = "data", encoded = true) String data);

然后,在发送到改造之前自己对参数进行编码。
final String encodedData = URLEncoder.encode(data, "UTF-8");
Call<ResponseBody> result = service.getResponse(encodedData);

关于java - 改造无效的 URI,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32417603/

10-10 14:53