J'ai tout le processus que nous utilisons pour afficher certaines communications par courrier électronique dans notre application. Essayer de le garder aussi général que possible ...Impossible de décoder les valeurs hexadécimales dans l'info-bulle javascript
-Nous faire une demande à un service via XML -Get la chaîne de réponse XML, envoyer la chaîne à une méthode pour encoder des caractères non valides comme suit:
public static String convertUTF8(String value) {
char[] chars = value.toCharArray();
StringBuffer retVal = new StringBuffer(chars.length);
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
int chVal = (int)c;
if (chVal > Byte.MAX_VALUE) {
retVal.append("&#x").append(Integer.toHexString(chVal)).append(";");
} else {
retVal.append(c);
}
}
return retVal.toString();
}
Nous envoyons ensuite ce résultat d'une chaîne à une autre méthode pour supprimer tous les autres caractères non valides:
public static String removeInvalidCharacters(String inString)
{
if (inString == null){
return null;
}
StringBuffer newString = new StringBuffer();
char ch;
char c[] = inString.toCharArray();
for (int i = 0; i < c.length; i++)
{
ch = c[i];
// remove any characters outside the valid UTF-8 range as well as all control characters
// except tabs and new lines
if ((ch < 0x00FD && ch > 0x001F) || ch == '\t' || ch == '\n' || ch == '\r')
{
newString.append(ch);
}
}
return newString.toString();
}
- Cette chaîne est alors « unmarshal'ed » via le saxparser
- L'objet est ensuite renvoyé à notre action Afficher qui a généré la réponse à l'appel jsp/javascript pour créer la page.
Le problème est que du texte peut contenir des caractères qui ne peuvent pas être traités correctement. Ce qui suit est finalement rendu sur la page JSP très bien:
<PrvwCommTxt>This is a new test. Have a*&#xc7;&#xb4;)&#xa1;.&#xf1;&#xc7;&#xa1;.&#xf1;*&#xc7;&#xb4;)...</PrvwCommTxt>
Ce qui apparaît comme « Ceci est un nouveau test * Avoir un c') ¡.ñÇ¡.. » dans le navigateur.
suivant -La apparaît dans une info-bulle tout en planant au-dessus du texte ci-dessus:
<CommDetails>This is a new test. Have a*Ç´)¡.ñÇ¡.ñ*Ç´)¡.ñ*´)(¡.ñÇ(¡.ñÇ* Wonderful Day!</CommDetails>
Cela montre ensuite de manière incorrecte lorsque rendu dans l'infobulle javascript avec toutes les valeurs HEX et pas rendu correctement.
Des suggestions pour afficher correctement les caractères inconnus en javascript?