我有这个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);
}
}
答案 0 :(得分:2)
我在Netbeans中尝试了一个显示Charset.defaultCharset()的简单应用程序,它返回“UTF-8”。 Eclipse中的同一个返回“MacRoman”。我在Mac上,在Windows上它会返回“cp-1252”。
所以是的,当您在Netbeans中运行应用程序时,它默认为UTF-8编码,这就是解析XML时没有任何问题的原因。