• 締切済み

JSP/Servletのパラメータの受け渡しが文字化けしてうまくいきません。

_ranco_の回答

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

クライアント側(ブラウザ側)のエンコーディングに統一して下さい。

n_squirrel
質問者

補足

charset=Shift_JIS request.setCharacterEncoding("Shift_JIS"); response.setCharacterEncoding("Shift_JIS"); にしみても、 charset=Windows-31J request.setCharacterEncoding("Windows-31J"); response.setCharacterEncoding("Windows-31J"); にしみても、状況としては変わりませんでした。 charset=EUC-JP request.setCharacterEncoding("EUC-JP"); response.setCharacterEncoding("EUC-JP"); にすると自分の手のパラメータ以外もすべてまったく解読不能な文字化けになってしまいます。 たぶん、IE7(Shift_JIS)でもSleipnir(EUC-JP)だと思うのですが、いろいろ試してみたり他のPCでもやってみましたが同様でした。 全部で4つファイルがあるのですが、文字数制限で3つしか書けなかったので追記します。 <%@ page language="java" import="java.lang.*, java.util.*" contentType="text/html; charset=Shift_JIS" %> <jsp:useBean id="hoge" scope="request" class="beans.JankenBean"/> <html> <head> <title>じゃんけんの結果は?</title> </head> <body> <h4>あなたが選んだ手は・・・</h4><jsp:getProperty name="hoge" property="jibun" /> <img src=<%=hoge.getJgazou()%>> <p> <h4>コンピュータが選んだ手は・・・</h4><jsp:getProperty name="hoge" property="computer" /> <img src=<%=hoge.getCgazou()%>> <p> <h2>勝負の結果は・・・</h2><jsp:getProperty name="hoge" property="hantei" /> <p> <a href="JSP/JankenStart.jsp">もう一度勝負</a> </body>

関連するQ&A

  • プログラミング(JAVA)について

    2つほど質問があります。どなたか回答していただける方がいたらお願いします。 1、以下のじゃんけんゲームのプログラムを作成したのですがfor文を用いてコードを短くするにはどうすればいいですか?      class jyanken { public static void main(String[] args) { int x = 0, y = 0; if (args[0].equals("グー")) { x = 0; } else if (args[0].equals("チョキ")) { x = 1; } else if (args[0].equals("パー")) { x = 2; } else { System.out.println("エラー"); } y = (int)(Math.random() * 10.0) % 3; if (x == 0) { if (y == 0) { System.out.println("あいこ"); } else if (y == 1) { System.out.println("勝ち"); } else if (y == 2) { System.out.println("負け"); } } else if (x == 1) { if (y == 1) { System.out.println("あいこ"); } else if (y == 2) { System.out.println("勝ち"); } else if (y == 0) { System.out.println("負け"); } } else if (x == 2) { if (y == 2) { System.out.println("あいこ"); } else if (y == 0) { System.out.println("勝ち"); } else if (y == 1) { System.out.println("負け"); } } } } 2、もう1パターンでじゃんけんプログラムを作成しようと考えているのですが。上手くできないので参考のファイルを掲示してもらえると嬉しいです。 機能としては、for文とif文を使用して。プログラムの起動と同時に、コンピュータがグー、チョキ、パーをランダムに出す(プレーヤに見せない) 次に人がグー、チョキ、パー何を出すかをキーボードで入力して最後にプログラムが出したものとコンピュータがランダムに出したものと比較し、勝負を表示する。といった感じです。

  • C#の配列について

    0回答 C#の配列について 現在C#のジャンケンゲームの作成に取り組んでいます。 ユーザーの入力した数値に対して出す手を 1:グー2:チョキ3:パー という形にしたいのですが 0:グー1:チョキ2:パー という形になってしまいます。 コンピューターの出す手も 1~3ではなく0~2しか出さない状況で、どなたか修正方法を教えて頂けないでしょうか? 【ソースコード】 //コンピュータと自分の入力した手を判別するメソッド static void Janken(ref string myHand) { // Random クラスの新しいインスタンスを生成する Random ran = new System.Random(); //コンピュータの出す手を1以上3以下に設定する。 string[] com = new string[] { "1", "2", "3" }; string con = ran.Next(3).ToString(); //配列型、変数teに出す名前を設定 string[] te = { "グー", "チョキ", "パー" };

  • javaじゃんけんゲーの質問

    このjavaじゃんけんゲームで 0を押すまでじゃんけんが続いて0押したら終了して、終了と表示して、じゃんけんの勝敗が表示されるように作りたいんですけどどうしたらいいですか?教えてください import java.io.*; class kadai6 { public static void main(String args[]) throws IOException { System.out.println("これは、じゃんけんゲームです。"); System.out.println("あなたの手を入力して下さい。(1:グー、2:チョキ、3:パー、0:終了)さぁどれにしますか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int res =Integer.parseInt(str); switch(res){ case 1: System.out.println("あなたの手はグーです。"); break; case 2: System.out.println("あなたの手はチョキです。"); break; case 3: System.out.println("あなたの手はパーです。"); break; default: System.out.println("あなたの入力した値はエラーです。1~3の値を入力してください。"); System.exit(1); break; } int comp = (int)(Math.random()*3) + 1; switch (comp){ case 1: System.out.println("コンピュータの手はグーです。"); break; case 2: System.out.println("コンピュータの手はチョキです。"); break; case 3: System.out.println("コンピュータの手はパーです。"); break; default: System.out.println ("エラーです。"); break; } switch (res -comp) { case -2: System.out.println("コンピュータの勝ちです。"); break; case -1: System.out.println ("あなたの勝ちです。"); break; case 0: System.out.println ("あいこです。"); break; case 1: System.out.println ("コンピュータの勝ちです。"); break; case 2: System.out.println("あなたの勝ちです。"); break; default: System.out.println ("エラーです。"); break; } } }

  • どこに・・・

    import java.io.*; class janken { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("あなたの手を入力して下さい。(1:グー、2:チョキ、3:パー)?\n"); String str = br.readLine(); int a = Integer.parseInt(str); switch(a){ case 1: System.out.println("あなたの手はグーです。"); break; case 2: System.out.println("あなたの手はチョキです。"); break; case 3: System.out.println("あなたの手はパーです。"); break; default: System.out.println("1~3を入力してください。"); break; } { int ran = ((int)(Math.random()*3)+1); int b=ran; switch(b){ case 1: System.out.println("コンピュータの手はグーです。"); break; case 2: System.out.println("コンピュータの手はチョキです。"); break; case 3: System.out.println("コンピュータの手はパーです。"); break; } int c; c=a-b; if(c == 2){ System.out.println("勝ち"); } else if(c== -1){ System.out.println("勝ち"); } else if(c==0){ System.out.println("あいこ"); } else if(c==1){ System.out.println("負け"); } else { System.out.println("負け"); } } } } いまjavaの勉強をしており、練習をかてね上のようにじゃんけんのプログラムを書きました。今の段階で、一様動くのですが、一回ごとにじゃんけんが終了されてしまいます。そこで繰り返し文のwhile(a != x)を使って数値を入力したら終了するように考えているんですが、whileをどこに入れたらいいのかがわかりません・・・ 自分でいろんなところに入れて試して見たんですが、無限ループになったりして、終了してくれません。どこにwhileを入れたらいいのでしょうか?それてもwhileじゃないほうがいいのでしょうか?アドバイスお願いします。

    • ベストアンサー
    • Java
  • 例外処理

    import java.io.*; class janken { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int k=0,m=0,h=0,z=0; while(true){ System.out.print("あなたの手を入力して下さい。(1:グー、2:チョキ、3:パー、0:終了)?\n"); String str = br.readLine(); int a = Integer.parseInt(str); if(a == 0){ break; } z++; switch(a){ case 1: System.out.println("あなたの手はグーです。"); break; case 2: System.out.println("あなたの手はチョキです。"); break; case 3: System.out.println("あなたの手はパーです。"); break; default: System.out.println("1~3を入力してください。"); break; } { int ran = ((int)(Math.random()*3)+1); int b=ran; switch(b){ case 1: System.out.println("コンピュータの手はグーです。"); break; case 2: System.out.println("コンピュータの手はチョキです。"); break; case 3: System.out.println("コンピュータの手はパーです。"); break; } int c; c=a-b; if(c == 2){ System.out.println("あなたの勝ちです。"); k++; } else if(c== -1){ System.out.println("あなたの勝ちです。"); k++; } else if(c==0){ System.out.println("あいこです。"); h++; } else if(c==1){ System.out.println("コンピュータの勝ちです。"); m++; } else { System.out.println("コンピュータの勝ちです。"); m++; } } } System.out.println("じゃんけん終了。"); System.out.println("あなたは"+z+"試合中、"+k+"勝"+m+"敗"+h+"分けです"); } } このようにじゃんけんのプログラムを作りました。 しかし0~3以外の数字が入力されても、じゃんけんの勝敗を勝手に判定してしまいます・・・ try文でやってみたのですがいまいちうまくいきませんでした。 0~3を入力したら入力エラーと表示して、ふたたびユーザーの手を聞くようにしたいです。 どうすればよいかアドバイスお願いします。

    • ベストアンサー
    • Java
  • C#のループについて

    現在C#でジャンケンゲームの課題に取り組んでいるのですが、ループ処理や各メソッドに対しての変数にエラーがでてしまい、修正方法が分からず、どなたか教えて頂けないでしょうか? ・ユーザはグー、チョキ、パーをそれぞれ1、2、3の数字で入力する。 ・CPUは乱数を使って出す手を選ぶ。 ・5回勝負として、人間とコンピュータの勝った回数を数え、勝敗がつくたびに1回ずつ表示する。    あいこは決着がつくまで再勝負。途中でどちらかが3勝しても、5回最後まで勝負を続ける。   ・指定された範囲以外の値を入力したら負けにする 【実行例】  ユーザ名を入力してください:goto  手を入力してください(グー1、チョキ2、パー3): 1  CPU:チョキ  WIN  goto:1勝、CPU:0勝    手を入力してください(グー1、チョキ2、パー3): 3  CPU:パー  DRAW    手を入力してください(グー1、チョキ2、パー3): 3  CPU:チョキ  LOSE  goto:1勝、CPU:1勝    手を入力してください(グー1、チョキ2、パー3): 0  LOSE(反則負け)  goto:1勝、CPU:2勝    (中略)    goto:3勝、CPU:2勝  gotoさんの総合勝利です! using System; namespace Ensyuu007 { static class Program { static string? Myhand; static int CntWin = 0; //勝利回数 static int CntLose = 0; //敗北回数 static int CntDraw = 0; //引分回数 //ユーザー名の入力 static void Main(string[] args) { string EnterName = Console.ReadLine(); Console.WriteLine("ユーザ名を入力してください: {0}", EnterName); Console.ReadLine(); } //じゃんけんを5回行います。 for (int GameCnt = 0; GameCnt <= 5; GameCnt++) { //正しく入力されたかチェックを行うメソッド。 static string Check(ref string Myhand) { static = Console.ReadLine(); Console.WriteLine("手を入力してください(グー1、チョキ2、パー3):{0}", Myhand); //正しく入力されたかチェックします。 Check(ref Myhand); //0,1,2が入力された場合 if (Myhand.Equals("1") || Myhand.Equals("2") || Myhand.Equals("3")) { //入力した数字をそのまま返します。 return Myhand; } //1,2,3以外が入力された場合 else { Console.WriteLine("LOSE(反則負け)"); return Myhand; } } //じゃんけんを開始するメソッド。 static void Start() { //コンピューターとじゃんけんさせます。 Janken(ref Myhand); Console.ReadLine(); } //コンピュータと自分の入力した手を判別するメソッド static void Janken(ref string Myhand) { // Random クラスの新しいインスタンスを生成する Random ran = new System.Random(); //コンピュータの出す手を1以上3以下に設定する。 string[] com = new string[] { "1", "2", "3" }; string con = ran.Next(3).ToString(); //配列型、変数teに出す名前を設定 string[] te = { "グー", "チョキ", "パー" }; //コンピュータが勝利した場合 if (((Myhand == "1") && (con == "3")) || ((Myhand == "2") && (con == "1")) || ((Myhand == "3") && (con == "0"))) { Console.WriteLine("あなた:" + te.GetValue(int.Parse(Myhand))); Console.WriteLine("コンピュータ:" + te.GetValue(int.Parse(con))); Console.WriteLine("LOSE"); CntLose++; //敗北回数に加算 } //自分が勝利した場合 else if (((Myhand == "1") && (con == "2")) || ((Myhand == "2") && (con == "3")) || ((Myhand == "3") && (con == "1"))) { Console.WriteLine("あなた:" + te.GetValue(int.Parse(Myhand))); Console.WriteLine("コンピュータ:" + te.GetValue(int.Parse(con))); Console.WriteLine("WIN"); CntWin++; //勝利回数に加算 } //あいこだった場合 else { Console.WriteLine("あなた:" + te.GetValue(int.Parse(Myhand))); Console.WriteLine("コンピュータ:" + te.GetValue(int.Parse(con))); Console.WriteLine("DRAW"); CntDraw++; //引分回数に加算 } } } static void Resurut() { if (CntWin > CntLose) { Console.WriteLine("総合勝利です"); } else if (CntLose < CntWin) { Console.WriteLine("CPUの総合勝利です"); }

  • PHPでじゃんけん勝負

    PHPでじゃんけん勝負ができるプログラムを作成しました。ラジオボタンから選択した値(「グー」あるいは「チョキ」あるいは「パー」)をPOSTで送信し、ユーザと相手(コンピュータ)が選んだ手と、じゃんけんの勝敗を表示します。ラジオボタンで選択をしなくても最初からあいこが表示された状態になります。どの部分を修正すればいいですか ? <?php $arry_hand = array('グー', 'チョキ', 'パー'); $me = ''; //取得したい3つ(グー、チョキ、パー)をそれぞれ定義して、文字列を初期化する $you = ''; $result = ''; if (isset($_POST['hand']) === TRUE) { $me = htmlspecialchars($_POST['hand'], ENT_QUOTES, 'UTF-8'); $you = $arry_hand[array_rand($arry_hand)]; } //最初からあいこが表示された状態になる if ($me === $you) { $result = 'あいこ'; } else if ($me === 'グー' && $you === 'チョキ' || $me === 'チョキ' && $you === 'パー' || $me === 'パー' && $you === 'グー') { $result = '勝ち'; } else{ $result = '負け'; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>じゃんけん</title> </head> <body> <h1>じゃんけん勝負</h1> 自分: <?php print $me; ?><br> 相手: <?php print $you; ?><br> 結果: <?php print $result; ?><br> <form method="post"> <label><input type="radio" name="hand" value="グー" <?php if ($me === 'グー') { print "checked";} ?> >グー</label> <label><input type="radio" name="hand" value="チョキ" <?php if ($me === 'チョキ'){ print "checked";} ?> >チョキ</label> <label><input type="radio" name="hand" value="パー" <?php if ($me === 'パー'){ print "checked";} ?> >パー</label> <input type="submit" value="勝負!!" > </form> </body> </html>

    • 締切済み
    • PHP
  • JSPでの文字化け

    こんにちは。 今JAVAを勉強中でJSPファイルを作成しています。 test.jsp <%@ page language="java" contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J"%> <HTML> <HEAD><TITLE>文字表示テスト</TITLE></HEAD> <BODY> <% String text = request.getParameter("text"); if (text != null) { if (!text.equals("")) { out.println("画面からの文字<BR>"); out.println(text); } } %> <FORM NAME="testForm" METHOD="post" ACTION="test.jsp"> <TEXTAREA NAME="text"></TEXTAREA> <INPUT TYPE="submit" VALUE="送信"> </FORM> </BODY> </HTML> Windowsで上のプログラムを実行すると問題なく表示されますが Linuxサーバで実行すると???となってしまいます。

    • ベストアンサー
    • Java
  • グーとグーで「あいこ」と表示されない。

    現在javaを勉強中でして、じゃんけんゲームを作成しているのですが、 出力のところで本来グーとグーで「あいこ」と表示されるはずなんですが、表示されなかったり、「相手側の勝ち」と表示されたりして、本来の表示がうまくできません。ソースコードを見ても間違っているようには見えないのですがどこか間違っていますか? ちなみにNetBeansを使用しております。よろしくお願いします。 /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package jyanken1; */ import java.io.*; import java.lang.invoke.MethodHandles; import java.util.Random; import jdk.nashorn.internal.runtime.regexp.joni.EncodingHelper; class Jyanken1 { /** * @param args the command line arguments */ public static void main (String[] args) throws IOException{ // TODO code application logic here String nyuuryoku; int nyuuryokuyou1; int sentouhyou; System.out.println ("じゃんけんゲームを始めます"); System.out.println ("0.グー 1.チョキ 2.パー"); BufferedReader nyuryokuyou = new BufferedReader (new InputStreamReader (System.in)); Random rnd = new Random(); nyuuryoku=nyuryokuyou.readLine (); nyuuryokuyou1=Integer.parseInt (nyuuryoku); while (nyuuryokuyou1 >=3){ System.out.println ("エラーです。もう一度入力しなおしてください"); System.out.println ("0.グー 1.チョキ 2.パー"); nyuuryoku=nyuryokuyou.readLine (); nyuuryokuyou1=Integer.parseInt (nyuuryoku); } switch(nyuuryokuyou1){ case 0: System.out.println ("自分側:グー"); break; case 1: System.out.println ("自分側:チョキ"); break; case 2: System.out.println ("自分側:パー"); break; } int ran = rnd.nextInt(2); switch(ran){ case 0: System.out.println ("cp:グー"); break; case 1: System.out.println ("cp:チョキ"); break; case 2: System.out.println ("cp:パー"); break; } if((nyuuryokuyou1==0&&ran==1)&&(nyuuryokuyou1==1&&ran==2)&&(nyuuryokuyou1==2&&ran==0)){ System.out.println ("自分側の勝ち"); }else if((nyuuryokuyou1==0&&ran==2)&&(nyuuryokuyou1==1&&ran==0)&&(nyuuryokuyou1==2&&ran==1)){ System.out.println ("相手側の勝ち"); }else if ((nyuuryokuyou1==0&&ran==0)&&(nyuuryokuyou1==1&&ran==1)&&(nyuuryokuyou1==2&&ran==2)) { System.out.println ("あいこです。"); } } }

    • ベストアンサー
    • Java
  • PHPでじゃんけん勝負

    じゃんけん勝負ができるプログラムを作成しました。ラジオボタンから選択した値 (「グー」あるいは「チョキ」あるいは「パー」)をPOSTで送信し、ユーザと相手(コンピュータ)が 選んだ手と、じゃんけんの勝敗を表示するというプログラムです。 エラーはありませんが、下記のプログラム以外にシンプルなプログラムがあれば教えてください。 <?php $janken = array('グー', 'チョキ', 'パー'); $result = ''; $me = ''; $com = ''; // $_POST['hand']が存在するか確認するのにissetを使う。$_POST['hand']を使いたいのであれば必ず必要 if (isset($_POST['hand']) === TRUE) { $me = htmlspecialchars($_POST['hand'], ENT_QUOTES, 'UTF-8'); $com = $janken[array_rand($janken)]; } if ($me === '' || $com === '') { $result = ''; //データがない時の処理 print '下の3つの中からどれかを選択してください'; } else if ($me === $com) { $result = 'あいこ'; } else if ($me === 'グー' && $com === 'チョキ' || $me === 'チョキ' && $com === 'パー' || $me === 'パー' && $com === 'グー') { $result = '勝ち'; } else { $result = '負け'; } ?> <!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <form method ="post"> <h1>じゃんけん勝負</h1> <p>自分:<?php print $me; ?></p> <p>相手:<?php print $com; ?></p> <p>結果:<?php print $result; ?></p> <!--php if ($hand === 'グー'){ print 'checked';} もしhandがグーであるなら、チェックボックスにチェックを表示させる--> <!--これをすることにより直近で選んだものにチェックがされるので、連続でクリックするときに便利--> <label><input type="radio" name="hand" value="グー">グー</label> <label><input type="radio" name="hand" value="チョキ">チョキ</label> <label><input type="radio" name="hand" value="パー">パー</label> <p><input type="submit" value="勝負!"></p> </form> </body> </html>

    • ベストアンサー
    • PHP