IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

erreur de récupérarion d'un fichier XML depuis un URL http a cause de don encodage


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 54
    Points : 31
    Points
    31
    Par défaut erreur de récupérarion d'un fichier XML depuis un URL http a cause de don encodage
    Bonsoir,
    Je cherche a récupérer une page XML via un URL http

    mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.Statement;
    import java.util.Enumeration;
    import java.util.Properties;
     
    public class Connecter {
     
    	public static void main(String[] args) throws IOException {
     
     
    		try{
    			URL url = new URL("http://api.openweathermap.org/data/2.5/weather?q=tebessa&mode=xml");		  
    			URLConnection con=url.openConnection();
    			//System.out.println(con.getContent());
     
    			InputStream input = con.getInputStream();
     
    			/*copier dans un fichier xml*/
    			while(input.available()>0)
    			{
    				//System.out.print((char)input.read());		       
    				String FileName = "XMLFile.xml";
     
    				FileOutputStream writenFile = new FileOutputStream(FileName);
    				int i = 0;
    				while ((i = input.read()) != -1) {
     
    					writenFile .write(i);
    				}//fin while
     
    				writenFile .flush();
    				writenFile .close();
    			}//fin while
     
    		}
    		catch(MalformedURLException e){
    			System.out.println(e);
    		}//fin catch
    }
    }
    le problème c'est que mon programme ne peux pas me récuperer les caractères comme "é" par exemple ,ça pante car l'encodage est du "ISO-8859-1"
    voila le fichier récupérer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <current>
      <city id="2494548" name="T
    c'est quoi la solution d'après vous

    merci pour votre aide

    salutations

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tu ne devrais pas utiliser input.available, celui-ci n'a rien à voir avec la fin de fichier mais avec le fait qu'il y aie ou non des données dans le buffer.. Avec ton code, si il y a la moindre latence dans le réseau, tu ne va pas sauver ton fichier!

    En fait toute ta boucle extérieure ne sert à rien.

    Pour le reste, ta boucle intérieur est fonctionnellement correcte (même si on aurait aimé une gestion propre de la cloture des stream et l'utilisation de read(byte[]) qui est plus performant. Vu que c'est de la lecture / écriture binaire, l'encodage n'a rien à voir dans l'histoire et le fichier stocké est exactement ce que le serveur à envoyé, au byte près.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    merci pour ta réponse si rapide,oui ta raison pour la boucle

    mais pour la récupération je ne comprends pas ou est le problème dans mon code!

    voila l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [Fatal Error] XMLFile.xml:4:2: Les structures de document XML doivent commencer et se terminer dans la même entité.
    Exception in thread "main" org.xml.sax.SAXParseException; systemId: file:/C:/Users/zina/workspace/Proj_Meteo/XMLFile.xml; lineNumber: 4; columnNumber: 2; Les structures de document XML doivent commencer et se terminer dans la même entité.
    	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 ReadXMLFile.parserXML(ReadXMLFile.java:101)
    	at ReadXMLFile.main(ReadXMLFile.java:312)

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Déjà, si c'est pour juste parser le fichier derrière, tu n'as pas besoin de le sauver, tu peux directement envoyer ton con.getInputStream() voir même ton url au parseur, et il se débrouillera très bien.
    Pour le reste, faudrait que tu nous poste ton fichier xml récupéré par ton code. Et que tu retire, encore une fois, cette boucle extérieure qui sert à rien.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    oui effectivement la boucle je l'ai enlevé

    voila mon fichier xml récupéré sera no valide la récupérartion s'arrete dans la lettre "é"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ?xml version="1.0" encoding="ISO-8859-1"?>
    <current>
      <city id="2494548" name="T
    si je change le lien par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URL url = new URL("http://api.openweathermap.org/data/2.5/weather?q=Adrar&mode=xml")
    le résultat sera

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    ?xml version="1.0" encoding="utf-8"?>
    <current>
      <city id="2483761" name="Adrar">
        <coord lon="-0.29" lat="27.89"/>
        <country>Algeria</country>
        <sun rise="2014-06-15T05:04:39" set="2014-06-15T18:58:49"/>
      </city>
      <temperature value="308.15" min="308.15" max="308.15" unit="kelvin"/>
      <humidity value="16" unit="%"/>
      <pressure value="1008" unit="hPa"/>
      <wind>
        <speed value="5.1" name="Gentle Breeze"/>
        <direction value="270" code="W" name="West"/>
      </wind>
      <clouds value="36" name="scattered clouds"/>
      <precipitation mode="no"/>
      <weather number="802" value="scattered clouds" icon="03n"/>
      <lastupdate value="2014-06-15T22:00:00"/>
    </current>
    j'ai constaté que c'est a cause du codage qui pose problème le premier est sur ISO-8859-1 par contre le deuxième est sur utf-8

    merci pour votre aide

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par miss_ana Voir le message
    oui effectivement la boucle je l'ai enlevé
    tu peux montrer ton code corrigé?

    Citation Envoyé par miss_ana Voir le message
    voila mon fichier xml récupéré sera no valide la récupérartion s'arrete dans la lettre "é"
    Tu peux attacher le fichier que tu as téléchargé? Et l'url associée? Ici l'url que tu as mise dans ton premier code me renvoie un message d'erreur http 500, alors que la deuxième non.

    Citation Envoyé par miss_ana Voir le message

    j'ai constaté que c'est a cause du codage qui pose problème le premier est sur ISO-8859-1 par contre le deuxième est sur utf-8
    C'est une bien bien audacieuse constatation, le deuxième fichier peut aussi bien être lu en iso qu'en us-ascii qu'en utf-8, il ne contient aucun caractère codé avec plus de 7 bits

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Bonjour

    voila mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.Statement;
    import java.util.Enumeration;
    import java.util.Properties;
     
    public class Connecter {
    	public static void main(String[] args) throws IOException {
     
    		try{
    			URL url = new URL("http://api.openweathermap.org/data/2.5/weather?q=tebessa&mode=xml");		  
    			URLConnection con=url.openConnection();
     
    			//System.out.println(con.getContent());
     
    			InputStream input = con.getInputStream();
     
    			/*copier dans un fichier xml*/
     
    				System.out.print((char)input.read());		       
    				String FileName = "XMLFile.xml";
     
    				FileOutputStream writenFile = new FileOutputStream(FileName);
    				int i = 0;
    				while ((i = input.read()) != -1) {
    					 System.out.print(" " + i); 
    					writenFile .write(i);
    				}//fin while
     
    				writenFile .flush();
    				writenFile .close();
    				}
    		catch(MalformedURLException e){
    			System.out.println(e);
    		}//fin catch
    }
    }
    voila le fichier résultat:j'ai pas pu l'envoyé comme étant fichier XML car il n'est pas valide


    C'est une bien bien audacieuse constatation, le deuxième fichier peut aussi bien être lu en iso qu'en us-ascii qu'en utf-8, il ne contient aucun caractère codé avec plus de 7 bits
    je voulait dire j'ai remarqué ,quand le serveur m'envoie un fichier avec le codage ISO-8859-1 la récupération plante
    Fichiers attachés Fichiers attachés

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Je viens de tester l'url que tu donne. Si tu la met dans un browser, tu verra que ton programme n'est pas en cause. Le serveur lui même arrête le travail après le T

    Nom : weathermap.png
Affichages : 1566
Taille : 33,4 Ko

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    rebonjour,

    oui je vois, au fait j’interroge plusieurs URL dont quelques un posent ce problème ,
    est ce que y a un moyen d’éviter ce genre d’exception c'est a dire que mon programme ignore ce URL et continue ...

    merci

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ben oui, tu catche l'exception du parseur dans un bloc catch

  11. #11
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    merci tchize_

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreurs de lecture d'un fichier xml depuis web
    Par Ema1714 dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 30/03/2014, 18h28
  2. Téléchargement de fichiers XML depuis un URL http
    Par jockhip12 dans le forum Langage
    Réponses: 2
    Dernier message: 28/05/2012, 11h51
  3. acceder à un fichier xml depuis une jsp
    Par rvfranck dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 04/10/2006, 18h12
  4. Lire/Ecrire dans un fichier .xml depuis Java
    Par SkyBioSS dans le forum Format d'échange (XML, JSON...)
    Réponses: 13
    Dernier message: 16/05/2006, 17h38
  5. erreur à l'ouverture de mon fichier xml
    Par 2tsiris dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 03/04/2006, 13h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo