嗨,我正在尝试通过 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/