[英]Jackson not de-serializing accentuated characters properly
我正在使用jackson通過以下代碼序列化XML文件中的客戶實體:
XmlMapper mapper = new XmlMapper();
String exportPath = System.getenv("TFH_HOME") + File.separator + "data" + File.separator + "XML" + File.separator;
mapper.enable(SerializationFeature.INDENT_OUTPUT);
mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
List<Customer> customers = customerService.findAllExplicit();
customers.forEach((customer) ->
{
try
{
mapper.writeValue(new File(exportPath + "customers" + File.separator + customer.getCustomerNumber() + ".xml"), customer);
}
catch (IOException ex)
{
logger.error("Error serializing customer " + customer.toString() + " : " + ex.getMessage());
}
});
這樣可以完美工作,並為每個客戶創建一個XML文件及其所有數據。 問題在於此數據是法語的,因此包含諸如é的強調字符。 這是我用來反序列化所述客戶的代碼:
public void importCustomers()
{
File customerFolder = new File(exportPath + "customers");
for (File customerFile : customerFolder.listFiles())
{
try
{
String customerXML = inputStreamToString(new FileInputStream(customerFile));
Customer customer = mapper.readValue(customerXML, Customer.class);
customer.setId(null);
customerService.save(customer);
}
catch (IOException ex)
{
logger.error("Error importing customer : " + ex.getMessage());
}
}
}
private static String inputStreamToString(InputStream is) throws IOException
{
StringBuilder sb = new StringBuilder();
String line;
try (BufferedReader br = new BufferedReader(new InputStreamReader(is)))
{
while ((line = br.readLine()) != null)
{
sb.append(line);
}
}
return sb.toString();
}
它可以正常工作,除了在反序列化時將é字符轉換為‰(它們已序列化,並且生成的XML文件顯示正確的字符)。 我知道這與字符編碼(UTF8與ISO-8859-2)有關,但是我不知道如何將其連接到Jackson的反序列化機制中。
任何幫助,將不勝感激!
謝謝
我最終放棄了Jackson,並使用了java.beans.XMLDecoder;
類代替。 使用此方法時,保留加重字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.