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 "Expected byte 2 of 2-byte UTF-8 sequence"


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 12
    Par défaut Erreur "Expected byte 2 of 2-byte UTF-8 sequence"
    Bonjour,

    J'ai fait le parsing du fichier xml par ExpSaxHandler avec SAX (le fichier est de taille 19G), le parsing se fait correctement pendant un certain temps puis il m'extrait l'erreur suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [Fatal Error] nom_de_fichier.xml:206010595:49: Expected byte 2 of 2-byte UTF-8 sequence.  
    org.xml.sax.SAXParseException: Expected byte 2 of 2-byte UTF-8 sequence.
    Pouvez-vous m'aider?
    Merci

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Il y a une erreur d'encodage de caractère dans ton fichier XML, probablement sur un accent ou un autre caractère pas très US.

    Le plus simple est de mesurer la position dans le fichier au fur et à mesure de la lecture, et s'arrêter quand l'erreur arrive. Ainsi, on peut regarder avec un éditeur hexa où est l'erreur précisément, et vérifier quelle est cette erreur d'encodage, ce qui permettra de réfléchir à une solution.

    Ah, et si tout ça est incroyablement compliqué, c'est normal : on ne fait pas de fichiers XML de l'ordre de la dizaine de mégas, et encore moins de gigas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 12
    Par défaut rep
    Tout d'abord merci pour la réponse.
    Citation Envoyé par thelvin Voir le message
    Il y a une erreur d'encodage de caractère dans ton fichier XML, probablement sur un accent ou un autre caractère pas très US.

    Le plus simple est de mesurer la position dans le fichier au fur et à mesure de la lecture, et s'arrêter quand l'erreur arrive. Ainsi, on peut regarder avec un éditeur hexa où est l'erreur précisément, et vérifier quelle est cette erreur d'encodage, ce qui permettra de réfléchir à une solution.
    Je peux pas accéder aux fichier xml pour voir où se situe l'erreur exactement.

    Ah, et si tout ça est incroyablement compliqué, c'est normal : on ne fait pas de fichiers XML de l'ordre de la dizaine de mégas, et encore moins de gigas.
    Si tu veux dire n'existe pas des fichiers xml de cette taille complètement, je te dis que la base de données de wikipédia peut atteindre plus que ça (2G compréssé et 20 G décompressé), et si tu veux dire que c'est difficile à traiter je te dix que j'ai pas le choix.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par Malak Tunisienne Voir le message
    Je peux pas accéder aux fichier xml pour voir où se situe l'erreur exactement.
    ?

    Eh ben, ma foi, je t'ai dit grosso-modo en quoi consiste l'erreur. Je ne vois pas ce que tu peux faire de plus si tu n'as pas accès au fichier.

    Citation Envoyé par Malak Tunisienne Voir le message
    Si tu veux dire n'existe pas des fichiers xml de cette taille complètement, je te dis que la base de données de wikipédia peut atteindre plus que ça (2G compréssé et 20 G décompressé),
    Et quand il y a une erreur là-dedans ils galèrent grave pour y faire quelque chose, eux aussi. Raison pour laquelle ils font des stress-test très poussé à petite échelle (quelques kilooctets,) et qu'en cas de problème ils peuvent découper en fichiers de taille raisonnable et analysable.
    CQFD.

    Citation Envoyé par Malak Tunisienne Voir le message
    et si tu veux dire que c'est difficile à traiter je te dix que j'ai pas le choix.
    Il est toujours techniquement possible de découper en des tailles raisonnables permettant de chercher l'erreur. Si on ne te laisse pas ce choix technique, pas de chance, mais il aurait fallu qu'on te le laisse pour que la situation soit gérable. Beurre, argent du beurre, etc.

    De toute façon, je t'ai indiqué comment déterminer grosso-modo à quel endroit du fichier il y a une erreur. Ce qui permettrait d'extraire cet endroit, de l'analyser et de vérifier l'erreur. Ce qui permettrait de déterminer ce qui la cause et comment réagir à tout ça.
    Mais si tu n'as pas accès au fichier, ben ce fichier contient une erreur fatale et il n'y a rien à faire. Il faut des fichiers qui ne contiennent pas d'erreur fatale.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 12
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Eh ben, ma foi, je t'ai dit grosso-modo en quoi consiste l'erreur. Je ne vois pas ce que tu peux faire de plus si tu n'as pas accès au fichier.
    Lorsque j'ai dis que je peux pas accéder au fichier c.à.d je peux pas ouvrer le fichier directement à partir le file mais par la classe Handler je peux entrer au document et extraire quelques parties selon des conditions et je peux pas afficher tout le texte tel qu'il est.
    Mon programme est d'extraire les phrases qui contiennent les mots clés que je cherche.

    Citation Envoyé par thelvin Voir le message
    Il est toujours techniquement possible de découper en des tailles raisonnables permettant de chercher l'erreur.
    Peux-tu m'envoyer un lien où je peux trouver un exp de programme de découpage?

    Citation Envoyé par thelvin Voir le message
    Si on ne te laisse pas ce choix technique, pas de chance, mais il aurait fallu qu'on te le laisse pour que la situation soit gérable. Beurre, argent du beurre, etc.
    ????

    Citation Envoyé par thelvin Voir le message
    De toute façon, je t'ai indiqué comment déterminer grosso-modo à quel endroit du fichier il y a une erreur. Ce qui permettrait d'extraire cet endroit, de l'analyser et de vérifier l'erreur. Ce qui permettrait de déterminer ce qui la cause et comment réagir à tout ça.
    L'exécution reste afficher les textes désirés jusqu'à arriver à cet erreur, il s’arrête sans afficher le texte spécifique à l'erreur.

    Citation Envoyé par tchize_ Voir le message
    Soit le fichier est un fichier utf-8 -> alors
    Le fichier est déja en utf-8.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    et bien, tu fait un random access file dessus, tu lit à partir de 2k avant l'erreur jusque 2k après, t'en fait un nouveau fichier et tu ouvre avec un éditeur hex.

    Si t'es sous unix, la commande suivante peut faire le travail

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    head -n 206010650 ton_fichier |tail -n 200 > extrait.bin
    ca lit jusque 50 lignes au delà de ton erreur et ça en extrait les 200 dernière lignes.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    de toutes façons, le problème est un problème d'encodage.

    Soit le fichier est un fichier utf-8 -> alors le programme qui l'a créé s'est vautré et à fait rentrer du caca. Si tu ne peux pas y accéder, demande à l'opérateur qui reçois l'erreur de le faire

    Soit le fichier n'est pas en utf-8 alors deux options
    -> le xml déclare que l'encodage est en utf-8: une nouvelle fois l'application qui l'a généré s'est donc vautrée
    -> tu ouvre en utf-8 "par défaut" : essaie d'ouvrir avec le bon encodage.


    Dans le pire des cas, tu ouvre en iso-8859-1. Comme toutes les combinaisons de byte sont valides, pas d'erreur possible, mais des accents pourris dans ton décodage si c'est pas un iso-8859-1

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    de toutes façons, le problème est un problème d'encodage.

    Soit le fichier est un fichier utf-8 -> alors le programme qui l'a créé s'est vautré et à fait rentrer du caca. Si tu ne peux pas y accéder, demande à l'opérateur qui reçois l'erreur de le faire

    Soit le fichier n'est pas en utf-8 alors deux options
    -> le xml déclare que l'encodage est en utf-8: une nouvelle fois l'application qui l'a généré s'est donc vautrée
    -> tu ouvre en utf-8 "par défaut" : essaie d'ouvrir avec le bon encodage.


    Dans le pire des cas, tu ouvre en iso-8859-1. Comme toutes les combinaisons de byte sont valides, pas d'erreur possible, mais des accents pourris dans ton décodage si c'est pas un iso-8859-1
    Sur des fichiers de cette taille, c'est pas facile-facile. Il faut aussi vérifier qu'on fait pas une connerie, en testant d'autres encodages comme ça.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    c'est pour ça que j'ai mis dans le pire des cas. C'est la solution qui lit le fichier jusqu'au bout, mais probablement mal

Discussions similaires

  1. Erreur "Invalid byte 2 of 3-byte UTF-8 sequence"
    Par boobs60 dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 3
    Dernier message: 30/09/2012, 17h36
  2. Erreur Object Expected
    Par outshined dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/10/2006, 12h12
  3. Réponses: 3
    Dernier message: 28/09/2006, 14h33
  4. Aide erreur <identifier> expected
    Par pianpif dans le forum Langage
    Réponses: 2
    Dernier message: 23/06/2006, 12h36
  5. [Image]Conversion Image en byte[] ou BufferedImage en byte[]
    Par ¤ Actarus ¤ dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 11/12/2005, 22h46

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