【问题标题】:UTF encoding for http post using okhttp使用 okhttp 对 http post 进行 UTF 编码
【发布时间】: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 像浏览器一样对字符串进行编码。

【问题讨论】:

    标签: java android okhttp


    【解决方案1】:

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

    1. PapaParsehttps://github.com/mholt/PapaParse
      • 优点:真的很轻
      • 缺点:不知道,它总是为我完成这项工作
    2. 或者,如果您已经在使用 guava 或愿意承担额外的应用程序大小/方法计数,那么它有一个完整的解析器/分隔符/URL 转义器选择 as described in the javadoc here
      • 优点:它提供了特殊字符解析所需的一切
      • 缺点:番石榴很少被认为足够有用,足以证明它带来的额外方法计数是合理的

    【讨论】:

    • 问题是我更喜欢了解浏览器在做什么,然后相应地设置编码,而不是“手动”,我在主帖中添加了更多信息。
    猜你喜欢
    • 2015-06-06
    • 2018-07-02
    • 2015-10-26
    • 2010-11-27
    • 2015-03-23
    • 2019-08-21
    • 2010-11-15
    • 2018-01-24
    • 2012-05-11
    相关资源
    最近更新 更多