Java Jackson ObjectMapper正在将欧洲符号变成垃圾角色

Java Jackson ObjectMapper正在将欧洲符号变成垃圾角色,java,json,character-encoding,jackson,Java,Json,Character Encoding,Jackson,我有一个对象,它有一个名为currencySymbol的字段,该字段将Euro符号存储在它的一个字符串类型的属性中。当我使用对象映射器将此对象转换为json时,euro符号将转换为垃圾字符。下面是我正在使用的代码。在转换为JSON之前,我需要进行任何字符编码配置吗 public String convertObjectToJson(Object obj) { long start = System.currentTimeMillis(); objectMapper.configu

我有一个对象,它有一个名为currencySymbol的字段,该字段将Euro符号存储在它的一个字符串类型的属性中。当我使用对象映射器将此对象转换为json时,euro符号将转换为垃圾字符。下面是我正在使用的代码。在转换为JSON之前,我需要进行任何字符编码配置吗

public String convertObjectToJson(Object obj) {
    long start = System.currentTimeMillis();
    objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
    String jsonBody = null;
    try {
        jsonBody = objectMapper.writeValueAsString(obj);
    } catch (JsonProcessingException e) {
        logger.info(e.getMessage(), e.fillInStackTrace());
    }
    logger.debug("Conversion time for object to json :: " + (System.currentTimeMillis() - start) / 1000d);
    return jsonBody;
}
输入对象:

{“currencySymbol”:₹","货币格式“:”₹0;-₹0"} 
JSON输出:

{“currencySymbol”:“ch”,“currencyFormat”:“ch 0;-ch 0”}

如您所见,转换后的“印度卢比”符号₹ 已变成垃圾角色。欧元符号也会发生同样的情况

我可以通过将配置参数jsonggenerator.Feature.ESCAPE_NON_ASCII设置为true来解决此问题。下面是工作代码

public String convertObjectToJson(Object obj) {
    long start = System.currentTimeMillis();
    objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
    objectMapper.getFactory().configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, true);
    String jsonBody = null;
    try {
        jsonBody = objectMapper.writeValueAsString(obj);
    } catch (JsonProcessingException e) {
        logger.info(e.getMessage(), e.fillInStackTrace());
    }
    logger.debug("Conversion time for object to json :: " + (System.currentTimeMillis() - start) / 1000d);
    return jsonBody;
}

我将发布一个答案,因为它可能对其他人有用

我也有类似的问题,但结果不是杰克逊的错

我试图使用Jackson库(版本2.8.6)将包含
字符的字符串序列化为JSON字符串

我试图调试代码以查看序列化JSON字符串的值,它包含
字符,但在控制台和日志文件中,我总是看到一个垃圾字符

因此,我的控制台和日志框架使用的编码出现了问题


仅供参考,关于如何显式设置Logback appender使用的编码。设置此编码后,我可以在我的日志文件中看到
符号。

您很可能不想每次编码到json时调用
ObjectMapper.configure()
,这是一项设置任务,应该完成一次。请添加带有值的示例对象和“垃圾”字符outputInput对象:{“currencySymbol”:"₹,“currencyFormat”:₹0;-₹0“}JSON输出{“currencySymbol”:“ch”,“currencyFormat”:“ch 0;-ch 0”}正如您在转换后看到的“印度卢比”符号₹ 变成了垃圾字符。欧元符号也会发生同样的情况。请编辑您的问题并添加详细信息,而不是在注释中提及。我使用了您的代码并在控制台上打印了输出,效果很好。您在哪里看到该符号被转换为垃圾符号-在控制台或某些UI上?