SAXParser kann einige Zeichen nicht analysieren
-
27-10-2019 - |
Frage
Ich mache ein einfaches SAXParsing mit SAXParser usw. auf Android / Java
Es kann Dateien richtig analysieren, aber es kommt zu Problemen, wenn es auf einige Sonderzeichen stößt, zum Beispiel wenn es diese XML-Datei unten analysiert:
<?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" />
es wird Schluckauf, wenn es in der letzten Zeile auf ä in Pohjois-Leppävaara trifft.
Der Fehler lautet:
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)
Ich bin sicher, dass SAXParser mit diesen Zeichen umgehen kann, aber ich glaube, ich muss irgendwo eine Codierung usw. festlegen?
Der Java-Code lautet wie folgt:
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;
}
Lösung 2
Dies scheint dies zu lösen:
Android: SaxParser-Probleme bei der ISO-8859-1-Codierung
StringReader sr = new StringReader(xmlString);
InputSource is = new InputSource(sr);
is.setEncoding("ISO-8859-1");
xmlReader.parse(is);
Andere Tipps
Ich gehe davon aus, dass dies ein Fehler in der Dokumentcodierung ist.Verwenden Sie einen Hex-Editor, um zu überprüfen, ob Leppävaara
die Byte-Sequenz 4c 65 70 70 e4 76 61 61 72 61
ist.Wenn ä
etwas anderes als E4
ist, wurde das Dokument mit einer anderen Codierung als ISO-8859-1 gespeichert.