如何在Apache HTTP Components中设置编码?

Dud*_*Bro 3 java apache-httpcomponents

如何在Apache HTTP组件中设置字符编码?

我做这样的事情:

    Form form = Form.form();
    form = form.add("somekey", "somevalue");
    Request request = Request.Post("http://somehost/some-form")
                             .request.bodyForm(form.build());
Run Code Online (Sandbox Code Playgroud)

"somekey"和"somevalue"是unicode字符串,因为所有java字符串都是unicode.我测试时,http组件将它们转换为latin-1.我希望它转换为其他东西(例如,utf-8).

cyf*_*r01 10

按照您在示例中显示的内容,您似乎正在使用流畅的API.

查看javadocs有一个版本,request.bodyForm()它接受一个字符集:

    import org.apache.http.Consts;
    ...
    request = request.bodyForm(form.build(), Consts.UTF_8);
Run Code Online (Sandbox Code Playgroud)

根据消息来源,charset默认为Consts.ISO_8859_1(aka Latin-1).

备择方案

  1. 如果这不起作用,请考虑:

    import org.apache.http.Consts;
    ...
    request.elementCharset(Consts.UTF_8);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 作为最后的手段,应该可以设置内容字符集.查看源代码elementCharset(),您可以尝试以下方法:

    import org.apache.http.Consts;
    import org.apache.http.params.CoreProtocolPNames;
    ...
    request.config(CoreProtocolPNames.HTTP_CONTENT_CHARSET, Consts.UTF_8);
    
    Run Code Online (Sandbox Code Playgroud)