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 を介して「非整列化」されます。
  • オブジェクトは、ページを作成するための呼び出し元の jsp/javascript への応答を生成する Display アクションに送り返されます。

問題は、一部のテキストに正しく処理できない文字が含まれている可能性があることです。以下は、最終的に 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>

「This is a new test. Have a*Ç´)¡.ñÇ¡.」と表示されます。ブラウザで。

-上記のテキストにカーソルを合わせると、ツールチップに次のように表示されます。

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

これは、すべての HEX 値を使用してツールチップ 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 に設定し、Web ブラウザに UTF-8 を使用するように指示する必要があります。これは、JSP の先頭に次の行を追加することで実行できます。

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

も参照してください

于 2010-06-16T16:43:30.590 に答える