3

Apache HTTPコンポーネントで文字エンコードを設定するにはどうすればよいですか?

私はこのようなことをします:

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

「somekey」と「somevalue」はすべてのJava文字列がユニコードであるため、ユニコード文字列です。私がテストしたとき、httpコンポーネントはそれらをlatin-1に変換します。他のもの(utf-8など)に変換したい。

4

1 に答える 1

10

例で示したように、流暢なAPIを使用しているようです。

javadocsを調べるとrequest.bodyForm()、文字セットを受け入れるバージョンがあります。

    import org.apache.http.Consts;
    ...
    request = request.bodyForm(form.build(), Consts.UTF_8);

ソースによると、文字セットのデフォルトはConsts.ISO_8859_1(別名Latin-1)です。

代替案

  1. それでも問題が解決しない場合は、次のことを検討してください。

    import org.apache.http.Consts;
    ...
    request.elementCharset(Consts.UTF_8);
    
  2. 最後の手段として、コンテンツの文字セットを設定できるようにする必要があります。のソースをelementCharset()見ると、次のことを試すことができます。

    import org.apache.http.Consts;
    import org.apache.http.params.CoreProtocolPNames;
    ...
    request.config(CoreProtocolPNames.HTTP_CONTENT_CHARSET, Consts.UTF_8);
    
于 2013-01-24T00:11:39.943 に答える