2010-03-25 13 views
1

J'ai une application MyFaces Facelets, où le codage de la page est un peu robuste. Quoi qu'il en soit, il est développé avec Eclipse et construit avec Ant, et kindof fonctionne bien dans Tomcat 2.0.26. Jusqu'ici tout va bien.Invalid byte 1 de la séquence UTF-8 de 1 octet

Maintenant, je préfère construire avec Maven, donc j'ai fait quelques fichiers pom, les ai ouverts dans Netbeans et construits, et maintenant j'ai un fichier war qui se déploie bien. Cependant, sur une page Facelet il vomit avec

com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence. 
     at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:684) 
     at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:554) 
     at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1742) 

Alors, je l'ai essayé beaucoup de choses différentes, et l'application fait courir des pages simples sans substance Facelet. Mais, tout fonctionne si je construis simplement avec Ant à la place ... Alors ma question est: Quelle est la différence la plus probable entre une construction de fourmis et une construction de maven qui peut causer cela?

Même si j'ai configuré pour UTF-8 dans Netbeans et pom-fichiers, Netbeans finit par rapporter les fichiers facelet comme ISO-8859-1 après quelques modifications. Je me suis assuré que la plupart des libs centrales sont de la même version (en particulier xerces 2.3.0), j'ai ajouté un filtre de servlet d'encodage qui n'a eu aucun effet.

Et, je préfère réparer le build maven et garder les pages buggées, que l'inverse ... mon intention est d'introduire Naven, pas de corriger les pages buggées.

Voici ce que dit le pom.xml sur l'encodage:

Fondamentalement, le pom.xml a le jeu suivant ...

<plugins> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.0.2</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
        <encoding>${project.build.sourceEncoding}</encoding>> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-resources-plugin</artifactId> 
       <version>2.2</version> 
       <configuration> 
        <encoding>${project.build.sourceEncoding}</encoding> 
       </configuration> 
      </plugin> 

.... 

    <properties> 
     <netbeans.hint.deploy.server>Tomcat60</netbeans.hint.deploy.server> 
     <project.build.sourceEncoding>utf-8</project.build.sourceEncoding> 
    </properties> 
+0

* Il semble également que même si j'ai configuré pour UTF-8 dans Netbeans et pom-fichiers * Pouvez-vous montrer ce que vous avez fait dans le pom? –

+0

voir la question mise à jour. –

+0

Ça a l'air bien. Cependant, sans "voir le tout", il semble difficile de dire quoi que ce soit. Juste au cas où, regardez http://72.5.124.102/thread.jspa?messageID=10633886. –

Répondre

1

J'ai eu le même problème!

I avait résolu en utilisant le morceau de code suivant:

String str = new String(oldstring.getBytes("UTF-8")); 
+3

Ce n'est pas une bonne solution. Cela code une chaîne de validité douteuse en octets UTF-8, puis les décode en utilisant le codage du système.Selon la machine sur laquelle vous exécutez ce code, cette opération peut corrompre les données ou ne rien faire. – McDowell

3

com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: octet invalide 1 de 1 octet UTF -8 séquence.

La cause de ce problème est qu'un fichier qui n'est pas UTF-8 est analysé en tant qu'UTF-8. Il est probable que l'analyseur rencontre une valeur d'octet dans la plage FE - FF. Ces valeurs ne sont pas valides dans le codage UTF-8.

Le problème pourrait probablement être résolu en changeant la déclaration XML du fichier pour qu'il soit l'encodage correct ou le ré-encodage du fichier en UTF-8.

+0

J'ai le même problème - lors de l'ouverture du fichier xml dans notepad ++, il est dit que le fichier est codé en "UTF-8 sans nomenclature". J'ai essayé de convertir (en utilisant notepad ++) le fichier à "UTF-8" aussi - le message d'erreur reste tout de même. Ma déclaration de xml est: Comme je le vois, l'encodage correspond à la déclaration et toujours l'erreur donnée ci-dessus apparaît? Ou est-ce que je manque quelque chose? – AgentKnopf

2

Sur Windows, c'est très facile. Obtenez Notepad ++ si vous ne l'avez pas, et changez l'encodage en utilisant le menu "encodage".