文字化けについて困ってます

このQ&Aのポイント
  • スケジュールの内部運用を作っており、指定した年月日、ユーザーID、内容について23件のレコードがあります。
  • 1ページのレコードを5件として設定し、「次へ」のリンクを押すと、リンクで値をサーブレット側に渡しています。
  • しかし、内容の文字化けが発生しており、困っています。ご指導願いたいです。
回答を見る
  • ベストアンサー

文字化けについて困ってます。

スケジュールの内部運用を作ってます。 指定した年月日、ユーザーID、内容について、23件レコードがあります。 1ページのレコードを5件として設定、「次へ」のリンクを押しますと、リンクで値をサーブレット側に渡してます。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> -略- <a href="http://localhost:8080/scheduleWork/RetrievalServlet? add=<%=ad+1%>&year=<%=scheduleBean.getYear()%>&month= <%=scheduleBean.getMonth()%>&day=<%=scheduleBean.getDay()%> &user_id=<%=scheduleBean.getUser_id()%>&contents= <%=scheduleBean.getContents()%>">・・・次へ</a> -略- </html> RetrievalServlet.java public class RetrievalServlet extends HttpServlet{ -略- public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{ request.setCharacterEncoding("Shift_JIS"); response.setContentType("text/html; Charset=Shift_JIS"); try{ int month=(Inteter.parseInt(request.getParameter("month")));//月 int year=(Inteter.parseInt(request.getParameter("year")))//年 int day=(Integer.parseInt(request.getParameter("day"))); //日 String user_id=request.getParameter("user_id");//ユーザーID String contents=request.getParameter("contents");//内容 int add=(Integer.parseInt(request.getParameter("add")));//前後指定数 -略- } 年、月、日、ユーザーID、前後指定数はそのとおりに渡されますけど、、内容だけが文字化けになってます。 すごく困ってます。 どうぞ、ご指導お願いいたします。

  • Java
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Tomcatのバージョンは?? 実はTomcat 5.xではGETにより受信したパラメータに対して、setCharacterEncodingメソッドの文字コードを「適用しない」という仕様変更がされています。 server.xmlのConnector要素て、useBodyEncodingForURI属性を <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true"/> のように指定してみては?

misaki777v
質問者

お礼

king_joe1006様: Tomcatのバージョンは5.5.9です。 「useBodyEncodingForURI="true"」を追加してみたら、文字化けが消えました。 本当にありがとうございました。 またご指導よろしくお願いいたします。               美咲より

関連するQ&A

  • ServletとJSPで。。。

    省略してますが、下記の記述で JSPの----部分の記述方法がわかりません。 実際、実行できる環境だといいのですが、今は実行環境がないので調査できません。 まだなにもわからない状態なので、記述が正しいかも自信ありませんがよろしくお願いします。 =============Servlet==============================Schedulebean bean = new Schedulebean(); bean.setYear(request.getParameter("year")); bean.setMonth(request.getParameter("month")); request.setAttribute("bean", bean); request.getRequestDispatcher("/jsp/schedulefrm.jsp").forward(request,response); ============ JSP ================== <%@ page contentType = "text/html; charset=Shift_JIS"%> <jsp:useBean id="bean" scope="request" class="java.lang.String"/> <HTML> <FRAMESET FRAMESPACING="10" COLS="250,*"> <FRAME src="/jsp/calender.jsp?Year=<%= year % -------- ↑ >&Month=<%= month %>" --------- ↑    上記をid 取得する記述は? name = "left" scrolling = "no" NORESIZE /> <FRAME src="/jsp/schedule.jsp?Year=<%= year %>&Month=<%= month %>" name = "right" scrolling = "yes" /> </FRAMESET> </HTML>

    • ベストアンサー
    • Java
  • 文字化けで困っています。

    文字化けで困っています。 下記のJSPからrequest.getParameterで他のJSPに取得させようとしているのですが、文字化けが起こってしまいます。どなたか、考えられる原因をご教授お願い致します。(eclipse 3.5) <%@page contentType="text/html; charset=Shift-JIS"%> <html:form action="/**/***"> <select name="color_name" > <option value="赤" selected>赤</option> <OPTION value="青">青</option> <OPTION value="黄">黄</option> <OPTION value="緑">緑</option> </select></TD> </html:form> -------------------------------------------------------- <%@page contentType="text/html; charset=Shift-JIS"%> <%=request.getParameter("color_name") %>

    • ベストアンサー
    • Java
  • スケジュール登録でのユーザー情報取りだし方法

    お世話になります。 現在jsp javascript でスケジュール管理プログラムを作っていますが、スケジュールの日付を指定するとすべてのスケジュール(ログイン時でも他ユーザーのスケジュールも表示される。) ことになってしまいますが、そうならないためにスケジュール登録の時にログイン時のユーザー情報 (ユーザー名、ID,パスワード)を取り出すにはどのような処置をすればよろしいでしょうか? 下記ソースです。(文字コード指定等省略してる部分があります。) スケジュール登録1 文字コード指定 <%! private String createOption(int start,int end){ StringBuffer builder = new StringBuffer(); for(int i=start;i<=end;i++){ builder.append("<option value ='"+i+"'>"+i+"</option>"); } return builder.toString(); } %> <html> <head> <title>スケジュール新規登録1</title> </head> <body> <form action="ScheduleToroku2.jsp" method="POST"> <tr> <td> <h3>スケジュールを登録したい日付を選択してください。</h3> </td> <th align="right">日付:</th> <td> <select name="sdate_year"><%=createOption(2000,2030)%></select>年 <select name="sdate_month"><%=createOption(1,12)%></select>月 <select name="sdate_day"><%=createOption(1,31)%></select>日 </td> <td> <h3>登録したい内容を入力してください。</h3> </td> <td> <textarea name="memo" rows="5" cols="40"></textarea> </td> <td> <h3>開始時間を選択してください。</h3> </td> <td> <select name="start_hour"><%=createOption(0,23)%></select>時 <select name="start_minute"><%=createOption(0,50)%></select>分 </td> <td> <h3>終了時間を選択してください。</h3> </td> <td> <select name="end_hour"><%=createOption(0,23)%></select>時 <select name="end_minute"><%=createOption(0,59)%></select>分 </td> スケジュール登録2 <% /*スケジュール登録1からデータを取得*/ String date=request.getParameter("sdate_year")+"-"+request.getParameter("sdate_month")+"-"+request.getParameter("sdate_day"); String memo=request.getParameter("memo"); String s_hour=request.getParameter("s_hour"); String s_minute=request.getParameter("s_minute"); String e_hour=request.getParameter("e_hour"); String e_minute=request.getParameter("e_minute"); if(Integer.parseInt(s_hour)>Integer.parseInt(s_hour)){ %> 下記スケジュール1の登録内容

  • Javaと言うより、for文の長さの問題なのですが……

    <%@ page language="java" contentType="text/html; charset=Shift_JIS" import="java.util.*"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>カレンダー</title> </head> <body> <% //カレンダーオブジェクトを生成する Calendar myCal = Calendar.getInstance(); //年月日を取得する int year = myCal.get(Calendar.YEAR); int month = myCal.get(Calendar.MONTH) + 1; if (request.getMethod().equals("POST")) { year = Integer.parseInt(request.getParameter("yyyy")); month = Integer.parseInt(request.getParameter("mm")); } //年月選択リストを表示する out.println("<form method='POST' action='Calendar2.jsp'>"); out.println("<table><tr><td>"); //年 out.println("<select name='yyyy'>"); for (int i = 2000; i <= 2020; i++) { out.println("<option"); if (i == year) { out.println(" selected "); } out.println(">" + i); } out.println("</select>年"); //月 out.println("<select name='mm'>"); for (int i = 1; i <= 12; i++) { out.println("<option"); if (i == month) { out.println(" selected "); } out.println(">" + i); } out.println("</select>月"); out.println("</td>"); out.println("<td><input type='submit' value='更新'></td>"); out.println("</tr></table></form>"); //カレンダーを表示する out.println("<table border='1'>"); out.println("<tr>"); out.println("<td>日</td>"); out.println("<td>月</td>"); out.println("<td>火</td>"); out.println("<td>水</td>"); out.println("<td>木</td>"); out.println("<td>金</td>"); out.println("<td>土</td>"); out.println("</tr>"); //1日の曜日を取得する myCal.set(year, month - 1, 1); int dw1 = myCal.get(Calendar.DAY_OF_WEEK); //末日を取得する int lastd = myCal.getActualMaximum(Calendar.DAY_OF_MONTH); //表示する日付を初期化する int day = 0; //1日から末日まで日付を表示する 添付したcalendar.jspなのですが、ずばりココ↓の部分なのですが、 for (int i=0; i<=5; i++) { ここで最大は5以下になっているのですが、そうすると1列多くならないでしょうか。 これだと行数が6つになりますよね。 曜日のセルはその前に作っているので、曜日だけが入るのですから5行でいいと思うのですが、自分の考えは間違っているのでしょうか。 宜しくお願い致します。 for (int i = 0; i <= 5; i++) { if (day >= lastd) {break;} out.println("<tr>"); for (int j = 0; j <= 6; j++) { day = i * 7 + j - dw1 + 2; if (day > lastd || day < 1) { out.println("<td> </td>"); } else { out.println("<td>" + day + "</td>"); } } out.println("</tr>"); } out.println("</table>"); %> </body> </html>

    • ベストアンサー
    • Java
  • Javaと言うより、for文の長さの問題なのですが……

    <%@ page language=\"java\" contentType=\"text/html; charset=Shift_JIS\" import=\"java.util.*\"%> <!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\"> <html> <head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\"> <title>カレンダー</title> </head> <body> <% //カレンダーオブジェクトを生成する Calendar myCal = Calendar.getInstance(); //年月日を取得する int year = myCal.get(Calendar.YEAR); int month = myCal.get(Calendar.MONTH) + 1; if (request.getMethod().equals(\"POST\")) { year = Integer.parseInt(request.getParameter(\"yyyy\")); month = Integer.parseInt(request.getParameter(\"mm\")); } //年月選択リストを表示する out.println(\"<form method=\'POST\' action=\'Calendar2.jsp\'>\"); out.println(\"<table><tr><td>\"); //年 out.println(\"<select name=\'yyyy\'>\"); for (int i = 2000; i <= 2020; i++) { out.println(\"<option\"); if (i == year) { out.println(\" selected \"); } out.println(\">\" + i); } out.println(\"</select>年\"); //月 out.println(\"<select name=\'mm\'>\"); for (int i = 1; i <= 12; i++) { out.println(\"<option\"); if (i == month) { out.println(\" selected \"); } out.println(\">\" + i); } out.println(\"</select>月\"); out.println(\"</td>\"); out.println(\"<td><input type=\'submit\' value=\'更新\'></td>\"); out.println(\"</tr></table></form>\"); //カレンダーを表示する out.println(\"<table border=\'1\'>\"); out.println(\"<tr>\"); out.println(\"<td>日</td>\"); out.println(\"<td>月</td>\"); out.println(\"<td>火</td>\"); out.println(\"<td>水</td>\"); out.println(\"<td>木</td>\"); out.println(\"<td>金</td>\"); out.println(\"<td>土</td>\"); out.println(\"</tr>\"); //1日の曜日を取得する myCal.set(year, month - 1, 1); int dw1 = myCal.get(Calendar.DAY_OF_WEEK); //末日を取得する int lastd = myCal.getActualMaximum(Calendar.DAY_OF_MONTH); //表示する日付を初期化する int day = 0; //1日から末日まで日付を表示する 添付したcalendar.jspなのですが、ずばりココ↓の部分なのですが、 for (int i=0; i<=5; i++) { ここで最大は5以下になっているのですが、そうすると1列多くならないでしょうか。 これだと行数が6つになりますよね。 曜日のセルはその前に作っているので、曜日だけが入るのですから5行でいいと思うのですが、自分の考えは間違っているのでしょうか。 宜しくお願い致します。 for (int i = 0; i <= 5; i++) { if (day >= lastd) {break;} out.println(\"<tr>\"); for (int j = 0; j <= 6; j++) { day = i * 7 + j - dw1 + 2; if (day > lastd || day < 1) { out.println(\"<td> </td>\"); } else { out.println(\"<td>\" + day + \"</td>\"); } } out.println(\"</tr>\"); } out.println(\"</table>\"); %> </body> </html>

    • ベストアンサー
    • Java
  • C言語で分からないところがあるのですが……

    C言語で分からないところがあるのですが…… すみません。C言語を学習していてつまづいたので、皆さんの意見を聞きたいと思います。 現在、カレンダーを表示するプログラムをつくっています。 Yearとmonthをユーザが入力すると、その年その月のカレンダーが出るという算段です。(画像貼っておきます。ソースコードは下) これはできました。 これをいじって、Yearをユーザから受け取ると、その年の1月から12月までのカレンダーがば~っと表示されるようにしろ、と言われました。 Yearとmonthを受け取って書くやつは友人の助けを得ながらなんとかかけましたが、もう無理です。多分、for文を使うんだと思うんですが……助けてください! #include <stdio.h> int dayofweek(int year, int month); int daysinmonth(int year, int month); int daysinyear(int year); void showcal(int dow, int days); int main(void) { int year, month; int dow; int dim; printf ("Year?: "); scanf ("%d", &year); printf ("Month?: "); scanf ("%d", &month); dow = dayofweek(year, month); dim = daysinmonth(year, month); showcal(dow, dim); return 0; } void showcal (int dow, int days) { int i, j, d; printf ("Su Mo Tu We Th Fr Sa\n"); d = 1; for (i = 0; i < dow; i++) { printf (" "); } for (; i < 7; i++) { printf (" %d ", d); d++; } printf("\n"); for (j = 0; d <= days; j++) { for (i = 0; i < 7 && d <= days; i++) { if (d < 10) printf (" %d ", d); else printf ("%d ", d); d++; } printf("\n"); } } int daysinmonth( int year, int month) { int dim; dim = 31; if (month == 4 || month == 6 || month == 9 || month == 11) dim = 30; if (month == 2) { if ( (year % 4 == 0 && year % 100 != 0) || year % 400 == 0) dim = 29; else dim = 28; } return dim; } int daysinyear( int year) { int diy; if ( (year % 4 == 0 && year % 100 != 0) || year % 400 == 0) diy = 366; else diy = 365; return diy; } int dayofweek (int year, int month) { int dow; int days; int y, m; if (year >= 2000) { days = 0; for ( y = 2000; y < year; y++ ) { days = days + daysinyear(y); } for ( m = 1; m < month; m++ ) { days = days + daysinmonth(year, m); } dow = (6 + days) % 7; } else { days = 0; for ( m = month; m <= 12; m++ ) { days = days + daysinmo

  • プログラムの内容

    以下のプログラムは答えとして渡されたものなんですが、 コマンド引数を使ったプログラムの流れがよくわかりません。 簡単に解説してくれる方、いませんか? #include <stdio.h> int leapyear(int year){ if(year%400 == 0) return 1; else if(year%4 == 0 && year%100 != 0) return 1; else return 0; } void addmonth(int *day, int *month, int *year){ *day = 1; (*month)++; if(*month > 12) { *month = 1; (*year)++; } } int main(int argc, char *argv[]){ int year, month, day, a=0, max_days; int month_days[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; if(argc < 2) max_days = 10000; else max_days = atoi(argv[1]); printf("今日は西暦何年 何月 何日? "); scanf("%d%d%d",&year,&month,&day); while(a<max_days) { a++; day++; if(month == 2 && leapyear(year)) { if(day > 29) addmonth(&day, &month, &year); } else { if(day > month_days[month-1]) addmonth(&day, &month, &year); } } printf("今日から%d日後は、%d年%d月%d日です。",max_days, year, month, day); }

  • [JAVA]Servlet → JSP 文字化け発生!

    こんばんわぁ♪ サーブレットにおきまして・・・ ErrMsg = "【認証エラー】MSP情報(キーコードorパスワード)が違います!"; response.sendRedirect("../F_LogInOut.jsp?ErrMsg=" + ErrMsg); とJSPに接続します。 JSPでは・・・ <%@ page contentType="text/html; charset=Shift_JIS" %> とし、 <% if (request.getParameter("ErrMsg") != null){ out.println(request.getParameter("ErrMsg")); } %> とこれを表示します。 しかし、うまく表示できません・・・ 何ででしょうか? お願いします、お教えください。

    • ベストアンサー
    • Java
  • これまた初歩的なことかもしれませんが^^;

    Cです。今作成中の、カレンダーを表示させるプログラムの一部なのですが、それを以下に書きます。 ――――――――――――――― int day_of_week(int year, int month, int day) { int a, i, days1 = 0, days2 = 0, alldays, wk; a = (year - 1)/4; days1 = a * 366 + (year - 1 - a)*365 - (year - 1)/100 + (year - 1)/400; for(i=1; i< month ; i++) days2 += day_of_month(year, i); alldays = days1 + days2 + day; wk = alldays % 7; return(wk); } int write_cal(int year, int month) { /* !!! */ } ――――――――――― 関数write_calで、関数day_of_weekの戻り値wkをつかいたいのですが、!!! にそのままday_of_week(int year, int month, int day)を入れると当然コンパイルエラーになります。初歩的なことをわすれているのかもしれませんが、ポインタなどもつかっていいのでやりかた教えてください! int write_cal(int year, int month, int day) にするというのはナシでお願いします

  • javaでカレンダー作成

    西暦年号・月を入力して、その月のカレンダーを出力するというものです。 <処理例> 指定日のカレンダーを出力します。 西暦年を入力:2007 月を入力:6 日 月 火 水 木 金 土 ______________________1____2 _3___4___5___6___7___8___9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 というものを出力したいです。下線は何もないという意味です。(見にくかったらすみません) 一応途中のプログラム載せます。 ~~~の部分を教えてください。 お願いします。 import java.io.*; public class Ex01a{ public static void main ( String[] args ) throws IOException{ int year, month, day, i, youbiNum=0; String ss; BufferedReader kbd = new BufferedReader(new InputStreamReader(System.in)); System.out.println("指定月のカレンダーを出力します"); System.out.print("西暦年を入力:"); ss = kbd.readLine(); year = getInt(ss); System.out.print("月を入力:"); ss = kbd.readLine(); month = getInt(ss); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ day = 1; youbiNum=getyoubi(year,month,day); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } public static void printCal(int maxDay, int youbiNum){ int cal[] = new int[43]; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public static int getyoubi(int year, int month, int day){ int youbiNum, y1, nissuu=0; y1 = year-1; nissuu += y1 + y1/4 - y1/100 + y1/400+getJulian(year, month, day); youbiNum = nissuu % 7; return youbiNum; } public static int getJulian(int year, int month, int day){ int julian; julian = day; while(--month > 0){ julian+=getDay(year,month); } return julian; } public static int getDay(int year, int month){ int mmdd[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int mmdd_day; mmdd[2] += uruu(year); mmdd_day = mmdd[month]; return mmdd_day; } public static int getInt(String ss){ try{ return Integer.parseInt(ss); } catch(Exception e){ return 0; } } public static int uruu(int yy){ if(yy%4==0 && yy%100!=0 || yy%400==0) return 1; else return 0; } }

専門家に質問してみよう