1

为了在我们的应用程序中显示一些电子邮件通信,我已经完成了相当多的过程。尽量保持一般性...

- 我们通过 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 将该字符串“解组”
  • 然后将该对象发送回我们的 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 中呈现并且未正确呈现时,这会错误地显示出来。

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

4

1 回答 1

1

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

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

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

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

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

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

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

另见

于 2010-06-16T16:43:30.590 回答