2010-01-07 6 views
1

semaine dernière j'ai posé une question, mais JSF et le codage charsetJSF obtenir le double caractères UTF-8 codé

relevant SO question

Maintenant, je compris ce JSF dans mon env JBoss Portal. avec le pont de portlets jboss commun. Quand je soumets ma forme quelque chose de bizarre se produit:

Le portail est UTF-8 donc mes entrées de formulaire sont l'UTF-8, mais après la soumettre les caractères sont codés en UTF-8 nouveau qui fait quelque chose comme ça

äöü 

Si la page de réponse est à nouveau soumise, il se transforme en ce

äöü 

Vous pouvez cliquer sur le bouton soumettre et voir les caractères codés à chaque fois obtenir.

Est-ce que cela fonctionne comme prévu?

+0

Est-ce que la réponse à l'autre question vous convenait? et lequel? – Bozho

+0

comme pour cette question - Je pense que vous devriez lire les docs sur la façon dont le pont de portlet gère l'encodage – Bozho

+0

en ce qui concerne les docs - pour être plus précis - le code source, le pont hérite l'encodage du portail. Et c'est UTF-8. – onigunn

Répondre

5

Cela se produit lorsque les données initialement décodées à l'aide de UTF-8 ont été incorrectement codées à l'aide de ISO-8859-1. Vous pouvez facilement reproduire ce par:

String input1 = new String("äöü"); 
System.out.println(input1); // äöü 
String input2 = new String(input1.getBytes("UTF-8"), "ISO-8859-1"); 
System.out.println(input2); // äöü 
String input3 = new String(input2.getBytes("UTF-8"), "ISO-8859-1"); 
System.out.println(input3); // äöü 

(notez que la dernière contient en fait plus de caractères, mais l'analyseur de message de SO les a mangées).

Cela signifie que quelque part dans votre application Web ISO-8859-1 a été incorrectement utilisé au lieu de UTF-8. Il est difficile d'identifier la cause première avec autant d'informations que possible. Vous pouvez essayer de sysouter les paramètres de requête dans la méthode d'action bean JSF et lire la sortie dans stdout (vous devez seulement vous assurer que la stdout utilise aussi UTF-8! Si vous utilisez un EDI comme Eclispe, vous pouvez le configurer dans Workspace preferences). Si ces caractères sont également corrompus, c'est l'encodage de la demande qui est faux. Si ces caractères ont l'air bien, c'est la réponse ou l'encodage de webbrowser qui est faux. Pour exclure le webbrowser d'être suspect, vous pouvez, par ex. Firefox détermine l'encodage utilisé par Affichage>Encodage des caractères.

+0

J'ai changé ma journalisation en débogage et j'ai activé mon jboss pour consigner chaque requête. Il semble que les chars sont corrompus après mon soumettre, le journal montre les caractères Unicode seulement comme ???? J'utilise une station serveur JBoss 4.2.3. – onigunn

+0

L'enregistreur doit être configuré pour utiliser 'UTF-8'. Ce n'est pas en soi la cause profonde de ce problème particulier cependant. Relisez l'article pour ** comprendre ** les bits sur l'encodage des caractères. – BalusC

Questions connexes