MultipartEntityBuilder и Charset

Я обновил свой пакет 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, но это устарело, и похоже, что оно не работает

7 ответов

Решение

Решено:) получается, что ContentType теперь важен, и я отправлял простой текст, а также некоторый текст в формате JSON,

для простого текста вы можете использовать:

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

и для JSON:

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

таким образом, кодировка также работает со строками JSON (странно, но теперь нормально)

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));

Для тех, кто говорит, что принятое решение не работает для них (оно не для меня тоже), я решил его по-другому, используя:

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

Пожалуйста, попробуйте это для

Utf-8:

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

В моем случае я сначала настраиваю contentType следующим образом

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

и при добавлении пар укажите тип контента следующим образом

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

как здесь ответили MultipartEntityBuilder и setCharset для UTF-8 отправляет пустой контент

Изменение строки JSON на BinaryUTF8 также является отличным способом:

      MultipartEntityBuilder meb = MultipartEntityBuilder.create();
meb.setCharset(java.nio.charset.StandardCharsets.UTF_8);
byte[] bytes = StringUtils.getBytesUtf8(some_text);
meb.addBinaryBody("JSON", bytes);

Я решил это таким образом, используя: ContentType.TEXT_PLAIN.withCharset("UTF-8").

                         MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
                    entityBuilder.addTextBody("operation", "postdita");
                    entityBuilder.addTextBody("path", fileNode.getPath(),ContentType.TEXT_PLAIN.withCharset("UTF-8"));
                    entityBuilder.addTextBody("createrev", "false");
                    entityBuilder.addBinaryBody("editorData", file);
                    entityBuilder.addTextBody("content-type", "application/x-www-form-urlencoded");
Другие вопросы по тегам