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

3
如何在Apache HTTP Components中设置字符编码?
我会像这样做:

我做了以下操作:

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

"

\"somekey\"和\"somevalue\"是Unicode字符串,因为所有Java字符串都是Unicode。在我的测试中,HTTP组件将它们转换为Latin-1编码。我希望它转换成其他编码(例如UTF-8)。

"

我不理解你的问题,请尽可能提供一些代码来澄清。 - Luiggi Mendoza
1
@LuiggiMendoza:将字符串提交到Apache Http Components库。在Java中,字符串意味着Unicode。但是对于我来说,它会被转换为Latin-1编码。我想更改它被转换成什么编码,例如UTF-8。 - Dude Bro
你在谷歌或这里都找不到任何结果。根据你的评论更新你的问题(至少更容易理解实际问题)。 - Luiggi Mendoza
1个回答

10
根据您提供的示例,您似乎正在使用流畅的API。
查看javadocs,有一个接受字符集的request.bodyForm()版本:
    import org.apache.http.Consts;
    ...
    request = request.bodyForm(form.build(), Consts.UTF_8);

根据source,字符集默认为Consts.ISO_8859_1(也称为Latin-1)。

替代方案

  1. If that doesn't work, consider:

    import org.apache.http.Consts;
    ...
    request.elementCharset(Consts.UTF_8);
    
  2. As a last resort, it should be possible to set the content charset. Looking at the source for elementCharset(), you could try the following:

    import org.apache.http.Consts;
    import org.apache.http.params.CoreProtocolPNames;
    ...
    request.config(CoreProtocolPNames.HTTP_CONTENT_CHARSET, Consts.UTF_8);
    

有一个打字错误 request = request.bodyForm(form.build(), Consts.UTF_8);。 - Skriptotajs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接