无法在javascript工具提示中解码十六进制值

时间:2010-06-16 16:36:50

标签: java javascript encoding hex decoding

我有完整的流程,以便在我们的应用程序中显示一些电子邮件通信。尽量保持尽可能通用......

- 我们通过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
  • 将此字符串“unmarshal”
  • 然后将对象发送回我们的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>

这表现为“这是一个新的考验。有一个*Ç')¡Ç。”在浏览器中。

- 将以下内容显示在工具提示中,同时将鼠标悬停在上述文本上:

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

当在工具提示javascript中使用所有HEX值进行渲染并且未正确渲染时,会显示错误。

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

1 个答案:

答案 0 :(得分:1)

  

获取XML回复字符串,将字符串发送到方法以对任何无效字符进行编码,如下所示:

您应该使用Apache Commons Lang StringEscapeUtils#escapeXml()

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

这没有任何意义。在UTF-8范围之外没有。问题出在其他地方。摆脱这种方法。

  

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

您需要将响应编码设置为UTF-8并指示Web浏览器使用UTF-8。这可以通过将以下行放在JSP顶部来完成:

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

另见