2010-06-16 113 views
1

我有相當多的過程,我們要通過在我們的應用程序中顯示一些電子郵件通信。試圖保持它儘可能通用...無法解碼javascript工具提示中的十六進制值

- 我們通過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的
  • 0「unmarshal'ed」
  • 然後將對象發送回我們的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> 

作爲表示了:「這是一個新的測試有一個* C')¡.ñÇ¡。」在瀏覽器中。

-The以下在工具提示顯示出來,同時將鼠標懸停在上面的文字:

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

然後,這顯示了不正確時在JavaScript與所有的十六進制值,而不是被正確渲染工具提示呈現。

有關如何使未知字符在JavaScript中正確顯示的任何建議?

回答

1

獲取XML應答字符串,字符串發送到方法如下編碼任何無效字符:

您應該使用Apache Commons LangStringEscapeUtils#escapeXml()這一點。

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

這是沒有意義的。還有沒有什麼以外的UTF-8範圍。問題在於別的地方。擺脫這種方法。

問題是有些文本可能包含無法正確處理的字符。最終在JSP上呈現以下內容:

您需要將響應編碼設置爲UTF-8並指示webbrowser使用UTF-8。

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

參見:

這可以通過將下面的行JSP的頂部進行