2010-06-16 5 views
1

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*&amp;#xc7;&amp;#xb4;)&amp;#xa1;.&amp;#xf1;&amp;#xc7;&amp;#xa1;.&amp;#xf1;*&amp;#xc7;&amp;#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?

Répondre

1

obtenir la chaîne de réponse XML, envoyer la chaîne à une méthode pour encoder des caractères non valides comme suit:

Vous devez utiliser Apache Commons LangStringEscapeUtils#escapeXml() pour cela.

// remove any characters outside the valid UTF-8 range 

Cela n'a aucun sens. Il n'y a rien en dehors de la gamme UTF-8. Le problème se situe ailleurs. Débarrassez-vous de cette méthode.

Le problème est que du texte peut contenir des caractères qui ne peuvent pas être traités correctement. Les éléments suivants sont finalement restitués sur le JSP:

Vous devez définir le codage de réponse sur UTF-8 et demander au navigateur Web d'utiliser UTF-8.Cela peut se faire en mettant la ligne suivante en haut de page JSP:

<%@page pageEncoding="UTF-8" %> 

Voir aussi:

Questions connexes