java - enum - MultipartEntityBuilder y Charset
enum encoding java (5)
Actualicé mi paquete httpmime y ahora mis cadenas no se envían ni se reciben como 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..
¿Qué me estoy perdiendo? Solía crear un StringBody y establecer el conjunto de caracteres en el cuerpo de cadena, pero ahora está en desuso, y parece que no funciona.
En mi caso, configuro el contentType primero como este
ContentType contentType = ContentType.create(
HTTP.PLAIN_TEXT_TYPE, HTTP.UTF_8);
y al agregar pares, especifique el tipo de contenido como este
entityBuilder.addTextBody("title",pic.getTitle(),contentType);
como se responde aquí, MultipartEntityBuilder y setCharset para UTF-8 envían contenido vacío
Para aquellos que dicen que la solución aceptada no funcionó para ellos (tampoco lo fue para mí), la resolví de una manera diferente, usando:
builder.addTextBody(key, שלום, ContentType.TEXT_PLAIN.withCharset("UTF-8"));
Por favor intente esto para
Utf-8:
entity.addTextBody("your text", stringBuffer.toString(), ContentType.create("text/plain", Charset.forName("UTF-8")));
Resuelto: resulta que ContentType ahora es importante, y estaba enviando un texto que era sencillo, y también un texto que era JSON,
Para el texto plano, puede utilizar:
entity.addTextBody("plain_text",plain_text,ContentType.TEXT_PLAIN);
y para JSON:
entity.addTextBody("json_text",json_text,ContentType.APPLICATION_JSON);
de esa manera, el conjunto de caracteres también funciona en cadenas JSON (extraño, pero ahora está bien)
entity.addTextBody("plain_text", plain_text);
utilizará el ContentType.TEXT_PLAIN predeterminado que tiene este aspecto ...
public static final ContentType TEXT_PLAIN = ContentType.create("text/plain", Consts.ISO_8859_1);
mientras que ContentType.APPLICATION_JSON utiliza UTF-8 como se muestra a continuación
public static final ContentType APPLICATION_JSON = ContentType.create("application/json", Consts.UTF_8);
Entonces, lo que hice fue crear nuestro propio ContentType como este ...
entity.addTextBody("plain_text", plain_text, ContentType.create("text/plain", MIME.UTF8_CHARSET));