- PR -

JSP文字化けについて

投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2003/06/28
投稿数: 219
投稿日時: 2003-07-17 11:45
> 文字化けの状態なんですが「?」ではなく半角カタカナと感じが混ざっています。
> 「ヌッ7キハャ」といった感じです。

というところから推測しますと、どこかで文字エンコーディングが違ってますね。
私はOracleは疎いので出来れば他の方々のアドバイスを受けたほうがいいかもしれませんが
OracleのLANG設定とテーブルに記録されている文字エンコーディングなどの確認が
必要かな、と考えます。(ただ、5行程度だと正しく表示される、というのがちょっと
引っ掛かるところですが・・・。)
グーフィー
会議室デビュー日: 2003/07/07
投稿数: 9
投稿日時: 2003-07-17 14:09
グーフィーです。
<%= tableRows %>の全てが文字化けしている訳じゃ
ないですよね?

化けた部分だけじゃなくて、その前後が見たいのですが・・・



ティー
会議室デビュー日: 2003/07/16
投稿数: 6
投稿日時: 2003-07-17 15:26
ティーです。こんちには。返信ありがうございます。

Ken-Labさん
そうなんです。5行なんです・・・そこが気になって。
30回ほどループしてる間に毎回レコードセット作って
吐き出してって処理がまずいんでしょうか?この場合ループの
カウント数を日付として、SQLを発行してるのでこうせざるをえないかな
と思って試しているんですが。
以前作ったアプリケーションでは1回のSQL発行で50行ほどのレコードを
出力っていう照会画面的なものの時は文字化けせずに出てきたのに・・・
やっぱりここまでの結果から考えてDBアクセス部分でダメな可能性が
大きいですよね・・・


グーフィーさん。
><%= tableRows %>の全てが文字化けしている訳じゃないですよね?
全部なんですよ。。tableRowsに格納してる文字列だけでなくて、
全体的に、日本語部分は。その他ボタンや、見出しのような部分も
出力させてるんですがその部分も全部。
文字化けしない時は全部うまく出力されます。

一応全てのロジック部分を書いてみます。JavaもJSP
も初心者でカナリ大変恥かしいのですが・・・・

コード:
<%@ page contentType="text/html; charset=EUC_JP" import="java.sql.*,java.util.*" %>
<%
        // 変数宣言
	final int[][] monthDays ={
		{31,29,31,30,31,30,31,31,30,31,30,31},
		{31,28,31,30,31,30,31,31,30,31,30,31}};

	int cYear,cMonth,cDay;
	int cWeek;
        int cDayCount=0;
	int uru;
	int todayYear, todayMonth, todayDay;

	/* 今日の日付を調べる。月だけ0からスタートするので注意 */
        GregorianCalendar calendar = new GregorianCalendar();

	todayYear = calendar.get(Calendar.YEAR);
	todayMonth = calendar.get(Calendar.MONTH) + 1;
	todayDay = calendar.get(Calendar.DATE);

	/* パラメータの読みこみ */
	if ((request.getParameter("YEAR") == null) || (request.getParameter("YEAR").equals(""))){
		cYear = 0;
	}else{
		cYear = Integer.parseInt(request.getParameter("YEAR"));
	}
	if ((request.getParameter("MONTH") == null) || (request.getParameter("MONTH").equals(""))){
		cMonth = 0;
	}else{
		cMonth = Integer.parseInt(request.getParameter("MONTH"));
	}
	if ((request.getParameter("DAY") == null) || (request.getParameter("DAY").equals(""))){
		cDay = 0;
	}else{
		cDay = Integer.parseInt(request.getParameter("DAY"));
	}

	/* DB接続 */
        DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
        Connection con   = DriverManager.getConnection("jdbc:oracle:thin:@XXX.XX.XXX.XXX:XXXX:xxdb","XXX","XXX");

	/* カレンダー情報の初期化 */
	//calendar = new GregorianCalendar();
	if ((cYear == 0) || (cMonth == 0) || (cDay == 0)){
		cYear = todayYear;
		cMonth = todayMonth;
		cDay = todayDay;
	}
	/* 今月が何曜日から始まっているかを調べる */
	/* DAY_OF_WEEK 1〜7 > 日〜土 */
	GregorianCalendar thisMonth = new GregorianCalendar(cYear, cMonth - 1, 1);
	cWeek = thisMonth.get(GregorianCalendar.DAY_OF_WEEK) - 1;
	/* うるう年かどうかの確認 */
	uru = calendar.isLeapYear(cYear)?0:1;

	StringBuffer tableRows = new StringBuffer();

        /*表示日の初期化*/
        cDayCount = 1;
        /*当月11日から翌月10日までの表示*/
	for(int i = 1 ; i <= monthDays[uru][cMonth - 1]+10; i++){
                /*当月の最終日まで表示させたら表示日を1日に初期化*/
		if (cDayCount > monthDays[uru][cMonth - 1]){
			cDayCount = 1;
		}
                /*曜日の初期化*/
		if (cWeek == 7){
			cWeek = 0;
		}

		if (i >=10){
		  tableRows.append("<tr>");
		  if (cWeek == 0){
	  		/* 日曜日 */
			tableRows.append("<td bgcolor=#FFCCCC>");
		  }else if (cWeek == 6){
			/* 土曜日 */
			tableRows.append("<td bgcolor=#CCFFFF>");
		  }else{
			/* 平日 */
			tableRows.append("<td bgcolor=#FFFFFF>");
		  }
		  /* スケジュール登録画面の呼び出し*/
		  tableRows.append("<a href=\"javascript:ImageUp(\'SyukkinnboEntory.jsp?");
		  tableRows.append("YEAR=");
		  tableRows.append(cYear);
		  tableRows.append("&MONTH=");
		  tableRows.append(cMonth);
		  tableRows.append("&DAY=");
		  tableRows.append(cDayCount);
		  tableRows.append("&MODE=");
		  tableRows.append("\');\">");
		  tableRows.append(cDayCount);
		  tableRows.append("</a>");
		  tableRows.append("</td>");
		  try{
			/* 登録済スケジュールがあれば表示する */
			ResultSet rs;
                        String quary = "";
                        quary += "SELECT * FROM 出勤簿データ WHERE 年 = " + cYear;
                        quary += " AND 月 = " + cMonth;
                        quary += " AND 日 = " + cDayCount;
			Statement stmt = con.createStatement();
			rs = stmt.executeQuery(quary);
			String A;
			String B;
			String C;
			String D;
			String E;
			String F;
			String G;
	                A = "";
	                B = "";
	                C = "";
	                D = "";
	                E = "";
	                F = "";
	                G = "";

			while (rs.next()){
				A = rs.getString("A");
		                B = rs.getString("B");
		                C = rs.getString("C");
		                D = rs.getString("D");
		                E = rs.getString("E");
		                F = rs.getString("F");
		                G = rs.getString("G");
			}
			rs.close();
			stmt.close();
			tableRows.append("<td bgcolor=\"#ffffff\" nowrap align=left width=70>");
			tableRows.append(A);
			tableRows.append("</td>");
			tableRows.append("<td bgcolor=\"#ffffff\" nowrap align=left width=220>");
			tableRows.append(B);
			tableRows.append("</td>");
			tableRows.append("<td bgcolor=\"#ffffff\" nowrap align=right width=50>");
			tableRows.append(C);
			tableRows.append("</td>");
			tableRows.append("<td bgcolor=\"#ffffff\" nowrap align=right width=50>");
			tableRows.append(D);
			tableRows.append("</td>");
			tableRows.append("<td bgcolor=\"#ffffff\" nowrap align=right width=50>");
			tableRows.append(E);
		  	tableRows.append("</td>");
			tableRows.append("<td bgcolor=\"#ffffff\" nowrap align=right width=50>");
			tableRows.append(F);
			tableRows.append("</td>");
			tableRows.append("<td bgcolor=\"#ffffff\" nowrap align=left width=160>");
			tableRows.append(G);
			tableRows.append("</td>");
			tableRows.append("</tr>");

			}catch(SQLException e){
				System.out.println(e.getMessage());
			}
		  /*tableRows.append("<br><br></td>");*/
                }
		  cWeek++;
                  cDayCount++;
	}
        /*コネクションクローズ*/
        con.close();
%>

<HTML>
<HEAD>
<script language="JavaScript"><!--
// イメージポップアップ表示
function ImageUp(url) {
window.open(url,"window1","width=500,height=500");
}
// --></script>
<STYLE TYPE="text/css">
<!--
body,tr,td,th { font-size:10pt }
small { font-size:9pt }
-->
</STYLE>
</HEAD>
<BODY bgcolor="#FFFFFF" text="#333333" link="#0000EE" vlink="#0000EE" alink="#FF0000">

<TABLE bgcolor="#7b92ad" width="100%">
    <TR>
      <TD><FONT size="3" bgcolor="#7b92ad"><FONT size="4" color=#ffffff><B>出勤簿</B></FONT></FONT></TD>
    </TR>
</TABLE>
<form action="" method="GET" ACTION="Syukei.jsp" target = "sum">
<input type=submit value="集計計算">
<br>
<br>
<center>
		<table bgcolor=#0a2d54 border=0 cellspacing=1 cellpadding=3>
		<tr>
		<td align=center colspan=8 bgcolor="#7b92ad"><font color=#ffffff><%= cYear %>年<%= cMonth %>月分</font></td>
		</tr>
		<tr>
		<td bgcolor="#bfcad7" align=center nowrap>日付</td>
		<td bgcolor="#bfcad7" align=center nowrap>作番</td>
		<td bgcolor="#bfcad7" align=center nowrap>顧客名</td>
		<td bgcolor="#bfcad7" align=center nowrap>出時間</td>
		<td bgcolor="#bfcad7" align=center nowrap>退時間</td>
		<td bgcolor="#bfcad7" align=center nowrap>残業</td>
		<td bgcolor="#bfcad7" align=center nowrap>深夜</td>
		<td bgcolor="#bfcad7" align=center nowrap>備考</td>
		</tr>
<%= tableRows %>
		</table>
		</form>
</center>
</BODY>
</HTML>



まりり
ぬし
会議室デビュー日: 2001/12/05
投稿数: 329
投稿日時: 2003-07-17 16:08
引用:

<%= tableRows %> と出力させています。
どうしても文字化けがするのでいろいろ調べた結果
この1か月分のループが多い場合文字化けするようでループの回数を5回
くらいに減らして表示すると文字化けせずに表示できます。
なにか変数に格納する文字数なので文字化けに影響があるものなのでしょうか?


こういう場合は入ってるデータも疑うのが良いかと。
キャラクタセットが微妙にずれている場合、特に発見しにくいです。
未記入
大ベテラン
会議室デビュー日: 2003/06/28
投稿数: 219
投稿日時: 2003-07-17 16:48
引用:

まりりさんの書き込み (2003-07-17 16:08) より:

こういう場合は入ってるデータも疑うのが良いかと。



はい、そうです。DBに格納されているデータです。先ほどのレスで
「テーブル」と書いてしまったので、ちょっと表現がボケてしまったかもしれません。

ダメ押しというより殆ど関係ないと思いますが、
このJSPファイルはEUCで書かれているとして、pageディレクティブに
pageEncoding = "EUC-JP"
を加えたほうが安全かな、と考えます。

# で、今気づいたんですが、’EUCアンダーバーJP’って正しく認識されるんでしたっけ?
# それから、ブラウザの文字判別は正しく切り替わっていますか?

[ メッセージ編集済み 編集者: Ken-Lab 編集日時 2003-07-17 17:42 ]
ティー
会議室デビュー日: 2003/07/16
投稿数: 6
投稿日時: 2003-07-17 19:30
ティーです。

# で、今気づいたんですが、’EUCアンダーバーJP’って正しく認識されるんでしたっけ?
# それから、ブラウザの文字判別は正しく切り替わっていますか?


おはずかしい話です。"EUC-JP"に直したところうまく表示されてしまい
ました。本当におはずかしい話です。
今まで何個かつくったJSPプログラムでは何も問題が
起こらなかったため、こんなことになってしまいました。

本当に今までレス下さったみなさんありがとうございます。
これからまたもっと修行積みたいと思います。
また何かのときによろしくお願いします。

スキルアップ/キャリアアップ(JOB@IT)