gpt4 book ai didi

java - Xerces Sax2解析器编码问题

转载 作者:行者123 更新时间:2023-12-01 15:48:48 28 4
gpt4 key购买 nike

我有一个 Sax 解析器类,用于 Swing 应用程序和部署到 GlassFish 的 Web 项目。

该类解析 xml 文件。它在 Netbeans IDE Swing 应用程序(在 IDE 中)和 Web 项目中完美运行。

但是当我将 swing 应用程序清理并构建到一个 .jar 中时,它不再识别 xml 文件中的 ī、ķ、ļ、ā 等符号。

如果我通过cmd编译并运行它,也会出现同样的问题。

在 Web 项目中也有同样的问题 - 使用 Glassfish 配置进行排序。

问题是如何在swing应用程序中解决这个问题?

这是一段和平的代码:

public void parseDocument(String filePath) {

try {
XMLReader xr = XMLReaderFactory.createXMLReader();
xr.setContentHandler(this);
InputSource is = new InputSource(new FileReader(filePath));
is.setEncoding("UTF-8");
xr.parse(is);

}catch(SAXException se) {
se.printStackTrace();
}catch (IOException ie) {
ie.printStackTrace();
}
}

setEncoding() 方法没有帮助。

最佳答案

您已经回答了您的问题,但是您可以处理此问题的另一种方法是在打开文件时显式设置转换。

public void parseDocument(String filePath) {
try {
XMLReader xr = XMLReaderFactory.createXMLReader();
xr.setContentHandler(this);
Reader reader = new InputStreamReader(new FileInputStream(filePath);
InputSource is = new InputSource(reader, "UTF-8");
is.setEncoding("UTF-8");
xr.parse(is);
}catch(SAXException se) {
se.printStackTrace();
}catch (IOException ie) {
ie.printStackTrace();
}
}

这与您在问题中的解决方案之间的最大区别是,我们在 FileInputStream 之上使用 InputStreamReader。根据 FileReader 的 javadoc ,它总是以“默认字符集”打开文件,这就是您的解决方案有效的原因,因为您正在更改默认字符集。您还可以明确指定要使用哪种字符集打开文件,但要做到这一点,您需要使用 InputStreamReader 和 FileInputStream 的组合。

关于java - Xerces Sax2解析器编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6546323/

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