web-dev-qa-db-fra.com

Que signifie le message "Octet non valide 2 d'une séquence UTF-8 à 3 octets"?

J'ai changé un fichier dans Orbeon Forms, et la prochaine fois que je charge la page, un message d'erreur indiquant Octet non valide d'une séquence de 3 octets UTF-8 . Comment puis-je résoudre ce problème?

14
avernet

Cela se produit lorsque Orbeon Forms lit un fichier XML et s'attend à ce qu'il utilise l'encodage UTF-8, mais que le fichier n'est pas codé correctement dans UTF-8. Pour résoudre ce problème, assurez-vous que:

  1. Vous avez une déclaration XML au début du fichier indiquant que le fichier est en UTF-8:

    <?xml version="1.0" encoding="UTF-8" ?>
    
  2. Votre éditeur est compatible XML, il peut donc analyser la déclaration XML et par conséquent utiliser le codage UTF-8. Si votre éditeur ne connaît pas le langage XML et que vous ne souhaitez pas utiliser un autre éditeur, recherchez une option ou une préférence vous permettant de spécifier que l'éditeur doit utiliser UTF-8.

12
avernet

Une séquence UTF-8 de trois octets ressemble à ceci:

1110xxxx 10xxxxxx 10xxxxxx

Votre message d'erreur peut signifier que le premier octet des trois identifie de manière incorrecte le début d'une séquence de trois octets ou que le deuxième octet est mal formé.

Comme @avernet le dit, vous devez vous assurer que tous les éléments de votre système produisent et attendent UTF-8.

5
rossum

Lorsque vous démarrez votre programme, utilisez l'argument de ligne de commande Java suivant:

-Dfile.encoding=UTF-8

Par exemple,

Java -Dfile.encoding=UTF-8 -jar foo.jar
4
remillet

J'ai eu le même problème dans Eclipse, je viens d'essayer en changeant le type de fichier.

Faites un clic droit sur fichier -> Ressource -> Codage de fichier texte (UTF-8)

Cette solution a fonctionné pour moi.

Merci.

2
venkat

Je vais fournir une réponse de codage spéciale. Lorsque vous vérifiez le fichier XML et qu'il n'y a rien de mal, vous utilisez Java et exécutez Tomcat Server. Votre code source peut négliger de spécifier vous-même le codage. JVM utilise donc le codage par défaut lors de la lecture du contenu xml sous forme de chaîne ou de tout autre élément représentant la chaîne, qui fait ensuite référence au codage par défaut de Tomcat. Si l'encodage de xml et Tomcat sont incohérents, le même message d'erreur peut également être signalé.

0
Scott Chu

Vous devrez peut-être configurer votre Tomcat avec le paramètre suivant:

-Dfile.encoding = UTF-8

0
Alfonso Leon

J'utilise Eclipse et j'ai également dû modifier l'encodage du fichier texte dans:

-> Windows-> Préférences-> Espace de travail 

Ensuite, cela a bien fonctionné.

Merci

0
Fran

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

Problème> J'obtiens des valeurs de certificat X509 (source de codage multiple) pour générer un rapport PDF . Le PDF est généré via un service Web qui attend un fichier UTF-8 xml demande et il me faut recoder les valeurs avant le marshalling.

Solution> http://fabioangelini.wordpress.com/2011/08/04/converting-Java-string-fromto-utf-8/

En utilisant cette classe:

public class StringHelper {

// convert from UTF-8 -> internal Java String format
public static String convertFromUTF8(String s) {
    String out = null;
    try {
        out = new String(s.getBytes("ISO-8859-1"), "UTF-8");
    } catch (Java.io.UnsupportedEncodingException e) {
        return null;
    }
    return out;
}

// convert from internal Java String format -> UTF-8
public static String convertToUTF8(String s) {
    String out = null;
    try {
        out = new String(s.getBytes("UTF-8"), "ISO-8859-1");
    } catch (Java.io.UnsupportedEncodingException e) {
        return null;
    }
    return out;
}
}

Usage:

//getSummaryAttMap() returns a HashMap
String value = (String) getSummaryAttMap().get(key);
if(value != null)
value = StringHelper.convertToUTF8(value);
else
value = "";
0
exoddus