非ASCII文字を.tagファイルに入れると、それらの文字は正しくエンコードされません。
私のアプリケーションはjetty8.1.4で実行されます。
.tagファイルにが含まれている場合é
、結果のHTMLページに。として表示されé
ます。同じ文字をJSPファイルに入れると、正しく表示されます。パラメータと同じ文字をタグに渡すと、正しく表示されます。
ファイルのエンコーディングはUTF-8です。結果ページもUTF-8でエンコードされます。UbuntuでEclipseからアプリケーションを実行するとき、またはdebianサーバーのjarにタグをデプロイするときに、同じ問題が発生します。
jettyによって生成されたjavaファイルでタグを確認したところ、次のé
ように変換されました。
out.write('Ã');
out.write('©');
したがって、タグがJavaクラスにプリコンパイルされると、エンコーディングが間違っています。
このステップでエンコーディングを制御できますか、または.tagファイルでエンコーディングを指定できますか?
詳細は次のとおりです。
タグファイルには、次の1文字のみが含まれていますé
。16進数で表示した場合と同じようにエンコードされC3 A9
ます(正しいUTF-8エンコード)。javaファイルは次のとおりです。
package org.apache.jsp.tag.web.tagLink.layout;
import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*;
public final class test_tag
extends javax.servlet.jsp.tagext.SimpleTagSupport
implements org.apache.jasper.runtime.JspSourceDependent {
private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();
private static java.util.Vector _jspx_dependants;
private JspContext jspContext; private java.io.Writer _jspx_sout; private org.glassfish.jsp.api.ResourceInjector _jspx_resourceInjector;
public void setJspContext(JspContext ctx) {
super.setJspContext(ctx);
java.util.ArrayList _jspx_nested = null;
java.util.ArrayList _jspx_at_begin = null;
java.util.ArrayList _jspx_at_end = null;
this.jspContext = new org.apache.jasper.runtime.JspContextWrapper(ctx, _jspx_nested,
_jspx_at_begin, _jspx_at_end, null); }
public JspContext getJspContext() {
return this.jspContext; }
public Object getDependants() {
return _jspx_dependants; }
public void doTag() throws JspException, java.io.IOException {
PageContext _jspx_page_context = (PageContext)jspContext;
HttpServletRequest request = (HttpServletRequest) _jspx_page_context.getRequest();
HttpServletResponse response = (HttpServletResponse) _jspx_page_context.getResponse();
HttpSession session = _jspx_page_context.getSession();
ServletContext application = _jspx_page_context.getServletContext();
ServletConfig config = _jspx_page_context.getServletConfig();
JspWriter out = jspContext.getOut();
try {
out.write('Ã');
out.write('©');
} catch( Throwable t ) {
if( t instanceof SkipPageException )
throw (SkipPageException) t;
if( t instanceof java.io.IOException )
throw (java.io.IOException) t;
if( t instanceof IllegalStateException )
throw (IllegalStateException) t;
if( t instanceof JspException )
throw (JspException) t;
throw new JspException(t);
} finally {
((org.apache.jasper.runtime.JspContextWrapper) jspContext).syncEndTagFile();
} } }
2つの呼び出しのパラメーターを見るout.write
と、それらはC3 83
とC2 A9
です。残りは単なるASCIIです。
テストタグのみを含むJSPページを作成しました。ブラウザから表示すると、次のように表示されますC3 83 C2 A9
。これがFiddler2で撮影された写真です。ブラウザはIE8です。
。
é
文字をJSPページに直接配置するC3 A9
と、Javaで生成されたファイルのように、またブラウザで受信したメッセージのようにエンコードされます。