多部分实体生成器和字符集

2022-09-01 20:09:10

我升级了我的 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中设置字符集,但现在已被弃用,它似乎不起作用


答案 1

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

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

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

对于 JSON:

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

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


答案 2
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));

推荐