2010-05-07 4 views
1

je les données suivantes .gpx de wikipedia:MalformedByteSequenceException tout en essayant d'analyser XML

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
<gpx xmlns="http://www.topografix.com/GPX/1/1" creator="byHand" version="1.1" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"> 
    <wpt lat="39.921055008" lon="3.054223107"> 
    <ele>12.863281</ele> 
    <time>2005-05-16T11:49:06Z</time> 
    <name>Cala Sant Vicenç - Mallorca</name> 
    <sym>City</sym> 
    </wpt> 
</gpx> 

Quand j'appelle ma méthode d'analyse syntaxique, je reçois une exception (voir ci-dessous). L'appel ressemble à ceci:

Document tmpDoc = getParsedXML(currentGPX); 

Ma méthode d'analyse syntaxique ressemble à ceci (code d'analyse standard, rien d'excitant ....):

public static Document getParsedXML(String fileWithPath){ 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder db; 
    Document doc = null; 
    try { 
     db = dbf.newDocumentBuilder(); 
     doc = db.parse(new File(fileWithPath)); 
    } catch (ParserConfigurationException e) { 
     e.printStackTrace(); 
    } catch (SAXException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return doc; 
    } 

Ce code simple lance exception suivante:

com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 3-byte UTF-8 sequence. 
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipChar(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) 
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) 
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source) 
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source) 
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source) 
at Zeugs.getParsedXML(Zeugs.java:38) 
at Zeugs.main(Zeugs.java:25) 

Je suppose que l'erreur se situe dans le format du premier fichier, mais je ne sais pas exactement où. Pouvez-vous s'il vous plaît me donner un indice?

+2

votre fichier est-il vraiment encodé en UTF-8? – Dormilich

+2

Que se passe-t-il si vous remplacez le 'ç' dans' Vicenç' par un 'c'? Vous avez toujours ce problème? – Oded

+2

+1 Dormlich, Oded. Le fichier n'a probablement pas été sauvegardé au format UTF-8. – ChrisBD

Répondre

5

Je suggère que votre fichier n'a pas été enregistré au format UTF-8. J'ai eu le même rapport d'erreur dans un de mes programmes.

2

Mais l'erreur ne se produisait que lors de l'exécution du fichier jar dans la console Windows. Sous linux ou en éclipse (cliquez avec le bouton droit sur le fichier de classe principal> Exécuter en tant qu'application Java), l'erreur ne s'est pas produite.

C'est à cause de l'encodage par défaut de Windows (Cp ..) vs UTF-8 sur linux et en eclipse. Pour changer la valeur par défaut lors de l'exécution du pot simplement ajouter le paramètre -Dfile.encoding = UTF8 au jvm

java -Dfile.encoding=UTF8 -jar myjar.jar 

Une raison pour laquelle le programme repose sur ce paramètre pourrait être que le codage n'a pas été explicitement spécifié lors de l'utilisation flux d'entrée ou des implémentations de lecteur.

Questions connexes