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