Java Jackson ObjectMapper正在将欧洲符号变成垃圾角色
我有一个对象,它有一个名为currencySymbol的字段,该字段将Euro符号存储在它的一个字符串类型的属性中。当我使用对象映射器将此对象转换为json时,euro符号将转换为垃圾字符。下面是我正在使用的代码。在转换为JSON之前,我需要进行任何字符编码配置吗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
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上?