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 :

[Woodstox] Invalid UTF-8 start byte 0x68


Sujet :

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

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut [Woodstox] Invalid UTF-8 start byte 0x68
    Bonjour,

    Je suis en train de parser un fichier avec Woodstox et je rencontre le soucis suivant :

    com.ctc.wstx.exc.WstxIOException: Invalid UTF-8 start byte 0x68 (at char #859, byte #-1)


    Je n'arrive pas à interpréter le message : je comprend bien que j'ai un soucis de codage UTF-8.

    Pour moi j'ai un UTF-8 qui commence par le byte 0x68 et qui au caractère position 859 contient la valeur -1 ? Mais je ne comprend pas comment c'est possible.

    Est-ce que quelqu'un peut m'expliquer ce message , d'avance merci.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Non, il contient la valeur 0x68. Je ne comprends pas ce que signifie byte #-1, ça m'a l'air mal fichu comme message.

    Mais c'est pas grave, le reste est clair : il y a dans ton XML des octets qui ne forment pas du utf-8 correct. Apparemment au 859e caractère.
    Tu n'as plus qu'à aller regarder.
    Un éditeur hexa peut aider.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Merci pour la réponse,

    Non pas de soucis de fichier, il est bien en UTF-8.

    J'ai trouvé la signification du -1, c'est la position du byte à décoder.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    com.ctc.wstx.exc.WstxIOException: Invalid UTF-8 start byte 0x68 (at char #859, byte #-1)
                    at com.ctc.wstx.sr.StreamScanner.constructFromIOE(StreamScanner.java:626)
                    at com.ctc.wstx.sr.StreamScanner.loadMore(StreamScanner.java:999)
                    at com.ctc.wstx.sr.StreamScanner.getNext(StreamScanner.java:756)
                    at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:1980)
                    at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1117)
    Or ça n'a pas de sens dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     private void reportInvalidInitial(int mask, int offset)
            throws IOException
        {
            // input (byte) ptr has been advanced by one, by now:
            int bytePos = mByteCount + mBytePtr - 1;
            int charPos = mCharCount + offset + 1;
     
            throw new CharConversionException("Invalid UTF-8 start byte 0x"
                                              +Integer.toHexString(mask)
                                              +" (at char #"+charPos+", byte #"+bytePos+")");
        }
    Le mByteCount et le mBytePtr à 0 est impossible il me semble, mByteCount vaut au moins 2 sinon pas la peine de le décoder.

    Comme la JVM est un peu spéciale et qu'avec la version d'avant ça marchait, on penche pour un soucis d'allocation mémoire.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hum. Moi je vérifierais quand même :

    - Si absolument tout le fichier est bien en utf-8 correct. (Peut-être que si ça marchait avant, c'est parce que seul ce fichier-là a un problème, et que les autres n'en avaient pas ?)
    - Quel est l'état véritable des variables du parseur/décodeur, avec un breakpoint. Au lieu de supposer des trucs.

    Mais bon, si c'est une JVM custom et qu'il peut y avoir des inconsistances de mémoire (ou une JVM normale et des threads qui provoquent une inconsistance mémoire,) on peut tout supposer, c'est sûr. 'Faudrait nous parler des nouvelles règles à respecter pour cette JVM.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Ca plante sur le mot é c h é a n c e :

    Ca donne :

    00E9 0063 0068 00E9 0061 006E 0063 0065
    -----------------^

    Ca plante là, ce qui est étonnant c'est d'avoir encore précisément le 68 dans le buffer au lieu du 00E9. Par contre je ne contrôle pas l'API Woodstock ni la JVM IBM, pas de trace possible.

    On va passer sur la version d'avant je pense.

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hum, effectivement on peut se demander ce qui lui prend de planter là et de donner ce message d'erreur.

    Enfin, je me demande, le dump hexa que tu nous as montré, là, c'est des octets ou c'est des caractères ?
    Parce que si c'est des octets, c'est pas de l'utf-8, ton truc. Mais alors il devrait planter sur le premier é, pas le second.

    Par contre je ne contrôle pas l'API Woodstock ni la JVM IBM, pas de trace possible.
    Bien pour ça que j'ai parlé de breakpoints, pas de traces.
    Et puis bon, pour la JVM encore, je dis pas, mais l'API Woodstock est open source. Si vraiment ça pouvait aider de mettre des traces, ce ne serait pas bien compliqué.

    On va passer sur la version d'avant je pense.
    Je suis assez curieux des résultats, pour être honnête.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Hum, effectivement on peut se demander ce qui lui prend de planter là et de donner ce message d'erreur.

    Enfin, je me demande, le dump hexa que tu nous as montré, là, c'est des octets ou c'est des caractères ?
    Parce que si c'est des octets, c'est pas de l'utf-8, ton truc. Mais alors il devrait planter sur le premier é, pas le second.
    C'est le fichier sous ultra edit au format hexa donc c'est les caractères lu depuis un fichier en UTF-8.

    Mais c'est bien de l'UTF-8, j'arrive à la parser avec un parser SAX sans soucis, mais pas sur cette JVM.

    Je vous tiendrai au courant de toute façon, ça intrigue pas mal de monde.

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Jimmy_ Voir le message
    C'est le fichier sous ultra edit au format hexa donc c'est les caractères lu depuis un fichier en UTF-8.

    Mais c'est bien de l'UTF-8, j'arrive à la parser avec un parser SAX sans soucis, mais pas sur cette JVM.
    Je n'ai pas UltraEdit et il n'est pas gratuit, alors je ne sais pas trop ce que tu nous as montré au juste.

    Mais si c'est un dump normal d'octets hexadécimaux, alors ceci n'est pas de l'utf-8. Le é ne se code pas E9 en utf-8, il se code C3 A9. De toute façon, c'est évident, 8 caractères avec des accents prennent forcément plus de 8 octets en utf-8.

    Quant à pourquoi ça passerait avec un parseur SAX, on peut imaginer plein de raisons.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Je rencontre le même problème
    Bonjour,
    Sur quel système rencontrez-vous ce problème?
    Je rencontre le même problème depuis que le système a été upgradé de SR8 à SR9 FP2.

    ?Une adaptation de woodstox serait t'elle la meilleure solution?
    ? Woodstox aurat t'il un meilleur comportement avec SR10?

    Cdlt,

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/06/2012, 16h51
  2. Réponses: 2
    Dernier message: 31/03/2011, 18h54
  3. [GTK+] Invalid utf-8 sur Windows
    Par 0xpoint dans le forum GTK+ avec C & C++
    Réponses: 10
    Dernier message: 01/03/2011, 20h47
  4. [XSLT] Invalid 2 or 3 bytes sequences
    Par sliderman dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 20/03/2008, 15h45
  5. IE utf-8 et Byte-order mark
    Par tom42 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 13/04/2007, 09h50

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