MultipartEntityBuilder和Charset

时间:2013-10-10 09:36:30

标签: java character-encoding

我升级了我的httpmime包,现在我的字符串不会以UTF-8

的形式发送或接收
MultipartEntityBuilder entity = MultipartEntityBuilder.create();
Charset chars = Charset.forName("UTF-8");
entity.setCharset(chars);
entity.addTextBody("some_text", some_text);

HttpPost httppost = new HttpPost(url); 
httppost.setEntity(entity.build());
...and so on..
我错过了什么? 我曾经构建一个StringBody并在stringbody中设置charset,但现在已经弃用了,它似乎无法正常工作

5 个答案:

答案 0 :(得分:23)

解决了它:)事实证明ContentType现在很重要,我发送的文本很简单,还有一些JSON文本,

对于纯文本,您可以使用:

entity.addTextBody("plain_text",plain_text,ContentType.TEXT_PLAIN);

和JSON:

entity.addTextBody("json_text",json_text,ContentType.APPLICATION_JSON);

这样,charset也适用于JSON字符串(很奇怪,但现在还可以)

答案 1 :(得分:17)

entity.addTextBody("plain_text", plain_text);

将使用默认的ContentType.TEXT_PLAIN,如下所示......

public static final ContentType TEXT_PLAIN = ContentType.create("text/plain", Consts.ISO_8859_1);

而ContentType.APPLICATION_JSON使用UTF-8,如下所示

public static final ContentType APPLICATION_JSON = ContentType.create("application/json", Consts.UTF_8);

所以我所做的就是像这样创建我们自己的ContentType ..

entity.addTextBody("plain_text", plain_text, ContentType.create("text/plain", MIME.UTF8_CHARSET));

答案 2 :(得分:7)

对于那些说接受的解决方案对他们不起作用的人(对我来说也没有用),我用不同的方式解决了它,使用:

builder.addTextBody(key, שלום, ContentType.TEXT_PLAIN.withCharset("UTF-8"));

答案 3 :(得分:2)

请试试

  

UTF-8:

entity.addTextBody("your text", stringBuffer.toString(), ContentType.create("text/plain", Charset.forName("UTF-8")));

答案 4 :(得分:1)

在我的情况下,我首先像这样设置contentType

ContentType contentType = ContentType.create(
                        HTTP.PLAIN_TEXT_TYPE, HTTP.UTF_8);

并在添加对时,指定内容类型,如此

entityBuilder.addTextBody("title",pic.getTitle(),contentType);

在这里回答MultipartEntityBuilder and setCharset for UTF-8 sends empty content