[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends:00135] Tomcat-4.0.6 の <jsp:forward で文字化け



始めまして、Polaと申します。

Tomcat-3.2.4+Apache-1.3.23+JDK1.3.1で動作していたアプリケーションを
Tomcat-4.0.6+Apache-1.3.27+JDK1.4.0.03にアップグレードしようとテストしていします。

ほとんどの問題は解決したのですが、一点だけ解決しません。
どなたかご存知でしたらご教示下さい。

<<現象>>

JSPからJSPへの転送を行う処理で日本語が正しく処理されない。
Tomcat-3.2.4まではUnicodeのまま処理が行われ、
<%@ page contentType=の指定でエンコードされると思っていましたが、
Tomcat-4.0.6では文字コードを調べた限りでは

/* 呼び出し元で調べた文字コード(当然UNICODE) */
dump(あいうえお): 3042 3044 3046 3048 304a 
/* 呼び出し先で調べた文字コード */
dump(BDFHJ): 42 44 46 48 4a

の様に先頭の一バイトを削っているように見えます。
new String(hoge.getBytes("8859_1"),"Shift_JIS")しても同様です。

以下ソースコードです。
[from.jsp]<-呼び出し元

<%@ page contentType="text/html;charset=Shift_JIS"%>
<% 
response.addHeader( "Pragma", "no-cache" );
response.addHeader( "Cache-control", "no-store" );
String value1 = new String("あいうえお");
String value2 = new String("てすと2");
StringBuffer sb = new StringBuffer();
char[] buf=value1.toCharArray();
sb.append("dump("+value1+"): ");
for (int i=0; i < buf.length; i++) {
  sb.append(Integer.toString(buf[i], 16)+" "); 
}
// ここは dump(あいうえお): 3042 3044 3046 3048 304a となる
System.out.println(sb.toString());

%>
  <jsp:forward page="to.jsp" >
      <jsp:param name="value1" value="<%= value1 %>" />
      <jsp:param name="value2" value="<%= value2 %>"/>
      <jsp:param name="buttonName" value="結果へ"/>
  </jsp:forward>

[to.jsp]

<%@ page contentType="text/html;charset=Shift_JIS"%>
<% 
response.addHeader( "Pragma", "no-cache" );
response.addHeader( "Cache-control", "no-store" );
// ここは MS932が出力される
System.out.println("System default encoding = "	+
System.getProperty("file.encoding"));
//String value1 = new String(request.getParameter("value1").getBytes("8859_1"), "Shift_JIS");
String value1 = request.getParameter("value1");
String value2 = request.getParameter("value2");

StringBuffer sb = new StringBuffer();
char[] buf=value1.toCharArray();
sb.append("dump("+value1+"): ");
for (int i=0; i < buf.length; i++) {
  sb.append(Integer.toString(buf[i], 16)+" "); 
}
// ここはdump(BDFHJ): 42 44 46 48 4a となる
System.out.println(sb.toString());
%>
<HTML>
<BODY>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE>テスト</TITLE>
<BODY>
<%= value1 %>
<P>
<%
out.println("<b>" + value2 + "</b>");
%>
</BODY>
</HTML>

と記述しています。
長くなってしまいましたが、解決法、原因などご教示いただければ幸いです。