Невозможно декодировать шестнадцатеричные значения в подсказке javascript - PullRequest
1 голос
/ 16 июня 2010

У меня достаточно процесса, который мы проходим, чтобы отобразить некоторые сообщения электронной почты в нашем приложении. Пытаясь сделать его как можно более общим ...

-Мы делаем запрос к услуге через 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 всплывающей подсказки со всеми значениями HEX и неправильной визуализации.

Любые предложения о том, как сделать так, чтобы неизвестные символы правильно отображались в javascript?

1 Ответ

1 голос
/ 16 июня 2010

Получить строку ответа XML, отправить строку в метод для кодирования любых недопустимых символов следующим образом:

Вы должны использовать Apache CommonsLang StringEscapeUtils#escapeXml() для этого.

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

Это не имеет смысла. ничего вне диапазона UTF-8.Проблема лежит где-то еще.Избавьтесь от этого метода.

Проблема в том, что какой-то текст может содержать символы, которые не могут быть правильно обработаны.В конце концов, на JSP в конечном итоге отображается следующее:

Вам необходимо установить кодировку ответа в UTF-8 и дать указание веб-браузеру использовать UTF-8.Это можно сделать, поместив следующую строку в верхней части JSP:

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

См. Также :

...