[英]Xerces Sax2 parser encoding problem
我有一個 Sax 解析器 class 用於 Swing 應用程序和部署到 GlassFish 的 web 項目中。
class 解析 xml 文件。 它在 Netbeans IDE Swing 應用程序(在 IDE 中)和 Z2567A5EC03705EB7AC2DZ8 項目中完美運行。
但是,當我將 swing 應用程序清理並構建為 one.jar 時,它不再識別 Z0F635D0E0F3874FFF8B581C132E6C7AZ 文件中的 ī、ķ、ļ、ā 等符號。
如果我通過 cmd 編譯並運行它,也會出現同樣的問題。
在 web 項目中遇到了同樣的問題 - 使用 Glassfish 配置進行排序。
問題是如何在 swing app 中解決這個問題?
這是代碼的和平:
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 的組合。
回答我自己的問題。
問題出在 JVM 設置上。
我在 Windows 系統變量中添加了一個新變量:
Variable name:JAVA_TOOL_OPTIONS
Variable value: -Dfile.encoding=UTF8
完美運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.