Ошибка кодировки Java XML - PullRequest
       14

Ошибка кодировки Java XML

2 голосов
/ 25 января 2012

Я реализовал следующий код в своем приложении Java

//create string from xml tree
            StringWriter sw = new StringWriter();
            StreamResult result = new StreamResult(sw);
            DOMSource source = new DOMSource(doc);
            trans.transform(source, result);
            String xmlString = sw.toString().replaceAll("&[^;]+?;", ""); //Replace invalid HTML characters

            //print xml
            System.out.println("The XML is:\n\n" + xmlString);

            OutputStream out = new FileOutputStream(dir.getSearchFileOutputDirectory() + "\\" + "output.xml");

            //Write the XML to disk
            out.write(xmlString.getBytes("ISO-8859-1"));
            out.close();

Теперь, если я выполню это в Netbeans, файл XML будет отлично отображаться в Chrome, IE и Firefox. Однако после того, как я очистил и собрал код, а затем запустил автономный файл JAR, браузеры сообщают об ошибках кодировки в файле и не могут его отобразить.

Дело в том, что строки, в которых они терпят неудачу, на самом деле не содержат ничего необычного, только стандартные символы ASCII, которые я вижу.

Может ли кто-нибудь пролить свет на то, почему это может происходить? Завтра я должен продемонстрировать код, и теперь я в панике, почему он вдруг делает эту странную вещь ...

Любая информация будет принята с благодарностью.

Спасибо

Tony

Ответы [ 2 ]

1 голос
/ 25 января 2012

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

0 голосов
/ 25 января 2012

XML не является HTML. Операция замены - это плохо. Если ваша таблица стилей говорит, что вывод HTML, он будет работать. Если он говорит, что вывод XML, то не пытайтесь использовать его как HTML.

...