2015-06-09 5 views
1

Я написал парсер XML, все работает отлично, за исключением текстовой кодировки. Я сделал несколько исследований, чтобы исправить это, но я все еще застрял.Проблемы с кодированием в XML-выходном файле

У меня есть список, который содержит строку фильмов названия и добавить его в XML с CDATA капсулирования, например:

CDATA movieTitle= new CDATA(aMovie.getTitle()); 
movie.addContent(new Element("title").addContent(movieTitle)); 

И я сохранить его с помощью этого:

XMLOutputter xmlOutput = new XMLOutputter(); 
Format format = Format.getPrettyFormat(); 
format.setEncoding("UTF-8"); 
xmlOutput.setFormat(format); 
xmlOutput.output(doc, new FileWriter(fileName+ ".xml")); 

Но результат:

<title><![CDATA[LA LOI DU MARCHxC9]></title> 

и должна быть "LA LOI Марш".

Что делать, чтобы избежать этого?

ответ

2

Как XML уже знает о кодировке, и помещает его в <?xml encoding ?>, я предпочитаю решение @rolfl, бинарное OutputStream.

Ошибка здесь в том, что FileWriter - очень старый класс утилиты, который использует кодировку по умолчанию. Что абсолютно не переносится.

xmlOutput.output(doc, Files.newBufferedWriter(Paths.get(fileName+ ".xml"), 
     StandardCharsets.UTF_8)); 
+0

Хороший ответ, спасибо. :) – alexcouter

1

Это распространенная проблема с JDOM, и это проблема, связанная с тем, как Java обрабатывает OutputStreams и Writers. По сути, Java не делает кодировку файлов видимой в Writer ... В вашем случае вы, вероятно, работаете с ASCII-писателем .... и он не может правильно кодировать unicode É.

Смотрите примечания на the XMLOutputter's documentation

Решение использовать FileOutputStream вместо FileWriter. Поскольку UTF-8 является кодировкой по умолчанию, вам не нужно ее устанавливать. Попробуйте:

XMLOutputter xmlOutput = new XMLOutputter(); 
xmlOutput.setFormat(Format.getPrettyFormat()); 
try (OutputStream out = new FileOutputStream(fileName+ ".xml")) { 
    xmlOutput.output(doc, out); 
} 
+0

Решение Joop лучше, стандартный выход OutputStream неверен. Но вы очень хорошо объяснили проблему. :) – alexcouter

Смежные вопросы