2013-10-10 7 views
16

ho aggiornato il mio pacchetto httpmime, ed ora le mie corde non vengono inviati o ricevuti come UTF-8MultipartEntityBuilder e Charset

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.. 

Che cosa mi manca? Ho usato per creare un StringBody e impostare il set di caratteri nel corpo di stringhe, ma ora è deprecato, e sembra non funzionare

risposta

21

Risolto il problema :) risulta che ContentType è ora importante, e io ero l'invio di testo che era semplice, e anche un testo che era JSON,

per il testo normale, è possibile utilizzare:

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

e per JSON:

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

in questo modo il set di caratteri funziona anche sulle stringhe JSON (strano, ma ora OK)

+0

Per quanto riguarda la pagina del documento 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) dice, Stringbody (String testo, ContentType contentType, charset Set) non è deprecato in 4.3.x – HirofumiTamori

15
entity.addTextBody("plain_text", plain_text); 

utilizzerà il predefinito ContentType.TEXT_PLAIN che simile a questa ...

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

mentre ContentType.APPLICATION_JSON è usando UTF-8 come di seguito

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

Quindi quello che ho fatto è stato creare i nostri ContentType come questo ..

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

Sopra Soluzione non ha funzionato per me, questo ha fatto (http * -4.3.6 .vaso). +1 –

1

Nel mio caso, ho configurato il contentType prima come questo

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

e quando si aggiungono le coppie, specificare il tipo di contenuto come questo

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

come risposta qui MultipartEntityBuilder and setCharset for UTF-8 sends empty content

2

Prova questo per

utf-8:

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

Per quelli che dicono che la soluzione accettata non ha funzionato per loro (che non ha fatto neanche per me), ho risolto in modo diverso, utilizzando:

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