Проблема с кодировкой CSV с использованием javax.xml.transform.Transformer в Linux, но не в Windows

Я создаю файл CSV из файлов XSL и XML.

Оба исходных файла имеют <?xml version="1.0" encoding="ISO-8859-1"?> в качестве заголовка.

String csvPath = "myCsvPath";
String xmlPath = "xmlPath.xml";
String xslPath = "xslPath.xsl"

File xmlFile = new File(xmlPath);
File xslFile = new File(xslPath);

Source xmlSource = new StreamSource(xmlFile);
Source xslSource = new StreamSource(xslFile);
Result result = new StreamResult(new ByteArrayOutputStream());

TransformerFactory transFac = new TransformerFactoryImpl();
Transformer trans = transFac.newTransformer(xslSource);
trans.setParameter("CSV_PATH","file:///" + csvPath);
trans.transform(xmlSource,result);

Я использую net.sf.saxon.Controller в качестве трансформатора. Версия Saxon 9.1.0.8, но я пробовал и 9.4, но безрезультатно. В моем XSL-файле один из ярлыков — «Disponibilité».

Если я запускаю генерацию на моем Dev tomcat, который находится в Windows, заголовок CSV будет «Disponibilité», нет проблем. Однако, если я запускаю генерацию на виртуальной машине Linux, «é» кодируется неправильно: «Disponibilit�»

Я проверил с помощью vim и журнала, исходный файл правильно показывает «é». Но как только генерация завершена, если я проанализирую первую строку моего файла через vim или log, я увижу, что é изменено на

Я проверил аналогичный вопрос, например: 8) НЕ работает

Но настройка trans.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); не работает. Не работает и использование StringWriter вместо ByteArrayOutputStream.


person TheBakker    schedule 02.02.2017    source источник
comment
Когда вы используете StringWriter, как вы проверяете результат? Попробуйте напечатать значение writer.toString().contains("Disponibilit\u00e9"). Кроме того, когда вы просматриваете исходный файл в Vim, что показывает :set fileencoding?   -  person VGR    schedule 02.02.2017
comment
Извините, я побежал за своим сообщением. Итак, я проверил контент писателя, но на самом деле он не содержит генерируемого контента. Поскольку кодирование VIM показывает, что это всегда UTF-8, независимо от того, пытаюсь ли я использовать кодировку набора для чего-то еще через setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");   -  person TheBakker    schedule 03.02.2017
comment
Я только что проверил кодировку моих файлов .xsl и .xml с помощью vim, и хотя заголовок обоих файлов - <?xml version="1.0" encoding="ISO-8859-1"?>, файл .xml показывает кодировку UTF-8, а файл .xsl - кодировку latin1...   -  person TheBakker    schedule 03.02.2017
comment
Тогда это кажется проблемой. Я верю в Vim, вы можете сделать :set fileencoding=iso-8859-1, а затем сохранить файл, чтобы принудительно сохранить его в правильной кодировке.   -  person VGR    schedule 03.02.2017