4字节UTF-8序列的无效字节2,但仅在执行JAR时无效



我有这个java程序,在那里我用TransformerFactory转换一个XML字符串,我从SQL Server数据库中获得并将其写入文件,然后使用该文件生成PDF。

事情是,当我用netbeans执行它时,它工作得很好,但如果我在项目dist文件夹中执行jar,我会得到一个"4字节UTF-8序列的无效字节2"。

在将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);
    }
}

我在Netbeans中尝试了一个简单的应用程序,显示Charset.defaultCharset(),它返回"UTF-8"。在Eclipse中,相同的语句返回"MacRoman"。我用的是Mac,在Windows上会返回"cp-1252"

所以,是的,当你在Netbeans中运行应用程序时,它默认为UTF-8编码,这就是为什么你在解析XML时没有任何问题。

最新更新