簡體   English   中英

傑克遜(Jackson)沒有正確地反序列化重音符號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM