У меня достаточно процесса, который мы проходим, чтобы отобразить некоторые сообщения электронной почты в нашем приложении. Пытаясь сделать его как можно более общим ...
-Мы делаем запрос к услуге через 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 всплывающей подсказки со всеми значениями HEX и неправильной визуализации.
Любые предложения о том, как сделать так, чтобы неизвестные символы правильно отображались в javascript?