2011-01-30 111 views
4

我在Android/JAVA做一些簡單的SAXParsing用的SAXParser等的SAXParser無法解析某些字符

它可以正確解析文件,但打嗝的時候遇到一些特殊的字符,例如,如果它下面解析這個XML:

<?xml version="1.0" encoding="ISO-8859-1" ?><MTRXML version="1.0"> 
<GEOCODE key="pohj"> 
<LOC name1="Pohjantori" number="" city="Espoo" code="995" address="" type="1" category="poi" x="2544225" y="6674893" lon="24.79378" lat="60.18324" /> 
<LOC name1="Pohjois-Haaga" number="" city="Helsinki" code="41" address="" type="1" category="poi" x="2549164" y="6680186" lon="24.88405" lat="60.23018" /> 
<LOC name1="Pohjois-Leppävaara" number="" city="Espoo" code="50" address="" type="1" category="poi" x="2545057" y="6679240" lon="24.80974" lat="60.22216" /> 

當它遇到的Pohjois-Leppävaara在上線就會打嗝。

它給人的錯誤是:

01-30 18:14:52.039: WARN/System.err(686): org.apache.harmony.xml.ExpatParser$ParseException: At line 5, column 24: not well-formed (invalid token) 

我肯定的SAXParser可以處理這些字符,但我相信我需要設置一些編碼等地方?

Java代碼是這樣:

AXParserFactory factory = SAXParserFactory.newInstance(); 

    SAXParser parser = null; 
    try { 
     parser = factory.newSAXParser(); 
    } catch (ParserConfigurationException e) { 
     e.printStackTrace(); 
     return null; 
    } catch (SAXException e) { 
     e.printStackTrace(); 
     return null; 
    } 

    XmlHandler handler = new XmlHandler(); 
    try { 
     parser.parse(urls[0], handler); 
    } catch (SAXException e) { 
     e.printStackTrace(); 
     return null; 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return null; 
    } 

回答

4

我希望這是在文件的編碼錯誤。使用十六進制編輯器來驗證Leppävaara是字節序列4c 65 70 70 e4 76 61 61 72 61。如果ä不是E4,則使用ISO-8859-1以外的編碼保存文檔。