【问题标题】:How to set encoding in Apache HTTP Components?如何在 Apache HTTP 组件中设置编码?
【发布时间】:2013-01-07 13:47:02
【问题描述】:

如何在 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" 是 unicode 字符串,因为所有 java 字符串都是 unicode。 http 组件在我测试时将它们转换为 latin-1。我希望它转换成其他东西(例如,utf-8)。

【问题讨论】:

  • 我不明白你的问题,如果可能的话,请用一些代码澄清一下。
  • @LuiggiMendoza:向 apache http 组件库提交一个字符串。 Java中的字符串表示unicode。对我来说,它被转换为 latin-1。我想更改它转换为的内容,例如 utf-8
  • 您不会在 Google 或此处获得任何结果。根据您的评论更新您的问题(至少比实际问题更容易理解)。

标签: java apache-httpcomponents


【解决方案1】:

按照您在示例中显示的内容,您似乎正在使用流畅的 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. 如果这不起作用,请考虑:

    import org.apache.http.Consts;
    ...
    request.elementCharset(Consts.UTF_8);
    
  2. 作为最后的手段,应该可以设置内容字符集。查看source for elementCharset(),您可以尝试以下操作:

    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);
猜你喜欢
  • 1970-01-01
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
  • 2014-05-16
相关资源
最近更新 更多