Преобразование Latin-1 (ISO-8859-1) в строку utf-8 в Java

Я пытался использовать Gson и org.json в качестве примера. Я пробовал Commons Text, но у меня не работает, когда Я импортирую библиотеку вручную (мне не разрешено использовать Maven). Поэтому я решил поискать другое решение.

NoClassDefFoundError: org/apache/commons/text/StringEscapeUtils

Мне нужно таким образом экранировать массив в Json. Особенно Ó, ó или любой символ Latin-1 (не экранируйте ", просто экранируйте то, что находится в "&%$/"Helló"). Исходное сообщение: Helló / // \ "WÓRLD"

{"token":"045-245","message":"Helló / // \\ \"WÓRLD\" "}

to

{"token":"045-245","message":"Hell\u00F3 / // \\ \"W\u00D3RLD\" "}

Это то, что я получаю, когда использую:

Гсон

JsonObject json = new JsonObject();
json.addProperty("token", "045-245");
json.addProperty("message", "Helló WÓRLD");
String payload = new Gson().toJson(json);
System.out.println(payload);

Результат:

{"token":"045-245","message":"Helló WÓRLD"}

org.json

JSONObject jsonObject = new JSONObject();        
jsonObject.put("token", "045-245");
jsonObject.put("message", "Helló WÓRLD");
System.out.println(jsonObject.toString());

Результат:

{"message":"Helló WÓRLD","token":"045-245"}

person Alberto Sanchez    schedule 03.06.2019    source источник
comment
Gson не поддерживает это (см. коды">stackoverflow.com/questions/43091804/ для обходного пути). Но Джексон знает! См. stackoverflow.com/questions/23121765/   -  person dnault    schedule 04.06.2019
comment
Возможный дубликат Write ObjectNode to JSON String с символами UTF-8 в экранированный ASCII   -  person dnault    schedule 04.06.2019
comment
@dnault Спасибо, но нужно ли мне использовать Maven? Я загрузил последнюю версию Jackson, но Netbeans не может управлять ObjectMapper mapper = new ObjectMapper(). Потому что, как я прошу, мне не разрешено использовать Maven.   -  person Alberto Sanchez    schedule 04.06.2019
comment
Вам просто нужно, чтобы Джексон был в вашем пути к классам.   -  person David Conrad    schedule 04.06.2019


Ответы (1)


Благодаря @dnault я нашел библиотеку Джексона Джсона. Мне нужно было импортировать com.fasterxml.jackson.core, com.fasterxml.jackson.databind. Я также импортировал com.fasterxml.jackson.annotations, без проблем на JDK 8.

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;

public class Foo {

    ObjectMapper mapper = new ObjectMapper();
    mapper.getFactory().configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, true);
    ObjectNode node = mapper.getNodeFactory().objectNode();
    node.put("token", "045-245");
    node.put("message", "Helló / // \\ \"WÓRLD\" ");
    System.out.println(mapper.writeValueAsString(node));

}

Выход:

{"token":"045-245","message":"Hell\u00F3 / // \\ \"W\u00D3RLD\" "}
person Alberto Sanchez    schedule 03.06.2019