Java 使用okhttp对http post进行UTF编码

Java 使用okhttp对http post进行UTF编码,java,android,okhttp,Java,Android,Okhttp,我正在尝试使用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); }

我正在尝试使用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;
        }
    }
}
当我在android和okhttp上执行此操作时,消息将作为:

...&message=%C3%B1%C3%B1&...

这就是我想要的,如何让OkHttp像浏览器一样对字符串进行编码。

以下是我知道的几个解决方案:

    • 优点:它真的很轻
    • 缺点:我不知道,它总是帮我完成任务
  • 或者,如果您已经在使用guava或愿意承担额外的应用程序大小/方法计数,那么它有一个完整的解析器/分隔符/URL转义符选择
    • 优点:它提供了特殊字符解析所需的一切
    • 缺点:番石榴本身很少被认为有足够的用处来证明它所带来的额外方法的合理性

  • 问题是,我更喜欢了解浏览器正在做什么,然后相应地设置编码,而不是“手动”,我在主要帖子中添加了更多信息。
    ...&message=%C3%B1%C3%B1&...