gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:27:11 24 4
gpt4 key购买 nike

我有这个 java 程序,我在其中使用 TransformerFactory 转换从 SQL Server 数据库获取的 XML 字符串并将其写入文件,然后使用该文件生成 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 时没有任何问题。

关于java - 4 字节 UTF-8 序列的字节 2 无效,但仅在执行 JAR 时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8074068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com