【发布时间】:2017-08-01 11:33:54
【问题描述】:
我正在尝试使用 OkHttp 将一些数据发布到 Web 服务器
public static void sendNewPost(NewPost post, Context context) throws IOException, NoSuchFieldException{
RequestBody body = post.buildBody();
URL url = buildURL("newreply.php");
openPage(url, body, context);
}
public class NewPost {
...
public setMessage(String m) {
MESSAGE = "Probando con la letra: ñ, áéíóú";
}
public RequestBody buildBody() throws NoSuchFieldException{
...
RequestBody postVariables = new FormBody.Builder()
.add(MESSAGE_KEY, MESSAGE)
.build();
return postVariables;
}
}
如果我发送它,服务器将显示如下内容:
Probando con la letra: ñ, áéÃóú
但是,如果我更改 setMessage 函数:
public setMessage(String m) {
m = "Probando con la letra: ñ, áéíóú";
MESSAGE = "";
for (int i = 0; i < m.length(); i++) {
switch (m.charAt(i)) {
case 'ñ':
MESSAGE += "%u00F1";
break;
case 'á':
MESSAGE += "%u00E1";
break;
case 'é':
MESSAGE += "%u00E9";
break;
case 'í':
MESSAGE += "%u00ED";
break;
case 'ó':
MESSAGE += "%u00F3";
break;
case 'ú':
MESSAGE += "%u00FA";
break;
default:
MESSAGE += m.charAt(i);
break;
}
}
}
一切正常,服务器显示正确。我认为它正在替换其 UTF-16 代码的西班牙字符,但我想知道是否有更好的方法来编码完整的字符串,或者让 OkHttp 处理它。
编辑:当我记录网络流量时,如果我的消息是:“ññ”,浏览器会将其编码为:
...&message=%F1%F1&...
当我在 android 和 okhttp 上执行此操作时,消息发送为:
...&message=%C3%B1%C3%B1&...
这就是我想要的,如何让 OkHttp 像浏览器一样对字符串进行编码。
【问题讨论】: