2013-10-10 44 views
16

我升级我的httpmime包,现在我的字符串不发送或接收为UTF-8MultipartEntityBuilder和字符集

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的字符集,但现在已被弃用,它只是似乎没有工作

回答

21

解决它:)事实证明,ContentType的是,现在重要的是,我是发送文本,这是平原,也有一些文字,这是JSON,

为纯文本,您可以使用:

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

和JSON:

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

这样的字符集也适用于JSON字符串(奇怪,但现在OK)

+0

至于文档页面http://hc.apache.org/httpcomponents-client-ga/httpmime/apidocs/org/apache/http/entity/mime/content/StringBody.html#StringBody(java.lang.String ,org.apache.http.entity.ContentType)说,StringBody(String text,ContentType contentType,Charset charset)在4.3.x中不推荐使用 – HirofumiTamori

15
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)); 
+0

以上解决方案没有为我工作,这确实(http * -4.3.6 。罐)。 +1 –

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

2

请尝试这对于

UTF-8:

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

对于那些谁说接受的解决方案并没有为他们的工作(它没有对我也),我解决它以不同的方式使用:

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