2010-06-16 25 views
1

我有相当多的过程,我们要通过在我们的应用程序中显示一些电子邮件通信。试图保持它尽可能通用...无法解码javascript工具提示中的十六进制值

- 我们通过XML - 获得的XML应答字符串建立到服务的请求,发送字符串的方法,以编码任何无效字符如下:

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(); 
} 

然后我们发送一个字符串的是结果的另一种方法,以消除任何其他无效字符:

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(); 
} 
  • 这个字符串然后通过SAXParser的
  • 0“unmarshal'ed”
  • 然后将对象发送回我们的Display动作,该动作生成对调用jsp/javascript的响应以创建页面。

问题是有些文本可能包含无法正确处理的字符。以下是最终呈现在JSP就好:

<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> 

作为表示了:“这是一个新的测试有一个* C')¡.ñÇ¡。”在浏览器中。

-The以下在工具提示显示出来,同时将鼠标悬停在上面的文字:

<CommDetails>This is a new test. Have a*Ç´)¡.ñÇ¡.ñ*Ç´)¡.ñ*´)(¡.ñÇ(¡.ñÇ* Wonderful Day!</CommDetails> 

然后,这显示了不正确时在JavaScript与所有的十六进制值,而不是被正确渲染工具提示呈现。

有关如何使未知字符在JavaScript中正确显示的任何建议?

回答

1

获取XML应答字符串,字符串发送到方法如下编码任何无效字符:

您应该使用Apache Commons LangStringEscapeUtils#escapeXml()这一点。

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

这是没有意义的。还有没有什么以外的UTF-8范围。问题在于别的地方。摆脱这种方法。

问题是有些文本可能包含无法正确处理的字符。最终在JSP上呈现以下内容:

您需要将响应编码设置为UTF-8并指示webbrowser使用UTF-8。

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

参见:

这可以通过将下面的行JSP的顶部进行