Неверный байт 2 из 4-байтовой последовательности UTF-8, но только при выполнении JAR? - PullRequest
6 голосов
/ 10 ноября 2011

У меня есть эта Java-программа, в которой я с помощью TransformerFactory преобразую строку XML, полученную из базы данных SQL Server, и записываю ее в файл, а затем использую этот файл для создания PDF.

Дело в том, что он работает нормально, когда я выполняю его с NetBeans, но если я выполняю JAR в папке проекта dist, я получаю «Недопустимый байт 2 из 4-байтовой последовательности UTF-8».

После изменения кодировки строки XML на UTF-8 теперь она отлично работает и из jar-файла.

Так что мой вопрос: почему это работает при запуске проекта?в NetBeans, но не из файла JAR до изменения кодировки?

Пробовали это только в Windows.

Код:

Вот запрос SQL Server (оригинал):

SQLXML xml = null;
String xmlString = "";
while (rs.next()){
    xml = rs.getSQLXML(1);
    xmlString = xml.getString();
}
return xmlString;

... и модифицировано:

SQLXML xml = null;
String xmlString = "";
while (rs.next()){
    xml = rs.getSQLXML(1);
    // Note explicit UTF-8 encoding specified
    xmlString = new String(xml.getString().getBytes(),"UTF8");
 }
 return xmlString;

А вот преобразование:

public static void serialize(Document doc, OutputStream out) throws Exception {
    TransformerFactory tfactory = TransformerFactory.newInstance();
    try {
        Transformer serializer = tfactory.newTransformer();
        serializer.setOutputProperty("indent", "yes");
        serializer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
        serializer.transform(new DOMSource(doc), new StreamResult(out));
    } catch (TransformerException e) {
        e.printStackTrace();
        throw new RuntimeException(e);
    }
}

1 Ответ

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

Я пробовал простое приложение в Netbeans, которое отображает Charset.defaultCharset () и возвращает «UTF-8». Тот же самый в Eclipse возвращает «MacRoman». Я на Mac, на Windows он вернул бы "cp-1252".

Так что да, когда вы запускаете приложение в Netbeans, по умолчанию используется кодировка UTF-8, поэтому у вас не было проблем при разборе XML.

...