簡體   English   中英

Xerces Sax2 解析器編碼問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM