我正在用android/java上的SAXParser等做一些简单的SAXParsing
它可以正确解析文件,但是遇到一些特殊字符时会出现打,,例如,如果它解析以下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中的ä时,它会打h。
它给出的错误是:
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;
}
最佳答案
我希望这是文档编码中的错误。使用十六进制编辑器来验证Leppävaara
是字节序列4c 65 70 70 e4 76 61 61 72 61
。如果ä
不同于E4
,则说明文档已使用ISO-8859-1以外的其他编码进行了保存。