为了在我们的应用程序中显示一些电子邮件通信,我已经完成了相当多的过程。尽量保持一般性...
- 我们通过 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*&#xc7;&#xb4;)&#xa1;.&#xf1;&#xc7;&#xa1;.&#xf1;*&#xc7;&#xb4;)...</PrvwCommTxt>
显示为“这是一个新测试。有一个*Ç´)¡.ñÇ¡。” 在浏览器中。
- 将鼠标悬停在上述文本上时,以下内容会显示在工具提示中:
<CommDetails>This is a new test. Have a*Ç´)¡.ñÇ¡.ñ*Ç´)¡.ñ*´)(¡.ñÇ(¡.ñÇ* Wonderful Day!</CommDetails>
然后,当使用所有十六进制值在工具提示 javascript 中呈现并且未正确呈现时,这会错误地显示出来。
有关如何使未知字符在 javascript 中正确显示的任何建议?