URLEncoderとURLDecoderの使い方について

このQ&Aのポイント
  • javaの初心者でもわかるURLEncoderとURLDecoderの使い方を解説します。
  • URLエンコードとURLデコードの手法とその使い方について説明します。
  • WindowsXP IE6.0 Tomcat5.5 JDK1.5環境下で文字化けが発生する原因と解決方法について説明します。
回答を見る
  • ベストアンサー

URLEncoderとURLDecoderの使い方について

はじめまして。javaの初心者です。 質問があります。以下のソースコードで、 ---------------------------------------------------------------- <%@ page contentType="text/html;charset=Shift_JIS" import="java.net.URLEncoder" %> <html> <body> <p>送信元 Test01.jsp</p> <% String query = URLEncoder.encode("テスト","Shift_JIS"); String url "http://localhost:8080/Test/Test02.jsp?name="+query; %> <a href="<%=url%>">送信</a> </body> </html> ---------------------------------------------------------------- <%@ page contentType="text/html;charset=Shift_JIS" import="java.net.URLDecoder" %> <html> <body> <p>送信先 Test02.jsp</p> <% String str = request.getParameter("name"); String name = URLDecoder.decode(str,"Shift_JIS"); %> <%= name %> </body> </html> ---------------------------------------------------------------- リンクに日本語をエンコードした文字列をクエリとして追加して 送信すると、送信先で表示したとき文字化けしてしまいます。 setCharacterEncoding("Shift_JIS")などを送信先に指定すると 文字化けは回避できるのですが、それではURLEncoderやURLDecoder を使用している意義がないのではないかと思っています。 なぜ文字化けしてしまうのかをご教授お願いします。 現在WindowsXP IE6.0 Tomcat5.5 JDK1.5を使用しています。

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

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

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

参考URLのような問題があるみたいですね。 (Versionが違うからはっきりとしたことがいえませんが・・・・。) もしApacheのcommonsを使用できる環境にあるならば org.apache.commons.codec.net.URLCodec でおそらく解決できるのではないでしょうか・・・? (検証していないのではっきりとしたことはいえませんが・・・。)

参考URL:
http://senrigan.ddo.jp/candid/urlencode.html
penpenpen000
質問者

お礼

braver_2004様へ 連絡が遅れましてすみませんでした。 braver_2004様が教えてくださいました、参考URLが大変参考になりました。ありがとうございました。 やはり、J2SE 1.5でも参考URLの内容と同じ問題がおこるようです。 JavaのURLEncoderによるエンコードの結果と、ブラウザによる エンコードの結果が異なるため、その異なったブラウザによるエンコードの結果がURLDecoderに渡されるために文字化けが生じたのですね。 勉強になりました。ありがとうございました。

関連するQ&A

  • jspから別のjspへパラメータが送信できない

    javaBeanを利用してjspを作成したけど Test.jspのソース <%@ page contentType="text/html; charset=Shift_JIS" %> <%@ page import="struts.*" %> <jsp:useBean id="formprocess" class= "struts.FormProcess" scope="application" /> <jsp:setProperty name="formprocess" property="*"/> <html> <head> <title>TEST</title> </head> <h2>情報の入力</h2> <form method="GET" action="/javaroad/jspdir/Test_1.jsp"> <p> 名前: <input type="text" name="name" size=30> <p> メールアドレス: <input type="text" name="mailaddress" size=30> <p> <input type="submit" value="送信"> </form> </center> </body> </html> Test_1.jspのソース <%@ page contentType="text/html; charset=Shift_JIS" %> <%@ page import="struts.*" %> <jsp:useBean id="formprocess" class= "struts.FormProcess" scope="application" /> <html> <head> <title>TEST</title> </head> <body> <p> 名前: <jsp:getProperty name="formprocess" property="name"/> <p> メールアドレス: <jsp:getProperty name="formprocess" property="mailaddress"/> </body> </html> Beanのソース package struts; public class FormProcess { String name; String mailaddress; public void setName(String name) { this.name = name; } public String getName() { return name; } public void setMailaddress(String mailaddress) { this.mailaddress = mailaddress; } public String getMailaddress() { return mailaddress; } } Test.jspでデータを入力して送信ボタンを押すとTest_1.jspではnullが表示します。前の入力したデータではないです。どうしたらできますか?

    • ベストアンサー
    • Java
  • inputタグ type=

    「入力.html」でfileを選択し、テキストボックスに文字を入力し サブミットボタンをクリックすると 「表示.jsp」にファイル名とテキストボックスに入力した文字 を表示させたいのですがテキストボックスに入力した文字 が表示されません(nullと表示される)。 どうすればテキストボックスに入力した文字を 表示させられるでしょうか。 ご回答よろしくお願いします。 ==表示.jsp== <%@ page contentType="text/html; charset=Shift_JIS" pageEncoding="Shift_JIS"%> <% request.setCharacterEncoding("Shift_JIS"); %> <%@ page import="java.util.*"%> <%@ page import="java.text.*"%> <%@ page import="java.util.regex.*"%> <%@ page import="javax.servlet.*"%> <%@ page import="java.io.*"%> <% byte buffer[] = new byte[4096]; ServletInputStream in = request.getInputStream(); /* boundaryの読み込み */ int size = in.readLine(buffer, 0, buffer.length); // 末尾の改行(CR+LF)を除いて文字列に変換 String boundary = new String(buffer, 0, size - 2); /* Content-Dispositionヘッダ読み込み */ size = in.readLine(buffer, 0, buffer.length); String header = new String(buffer, 0, size - 1); Pattern pattern = Pattern.compile(".*filename=[ \"]*(.*)[ \"][\\W]*"); Matcher matcher = pattern.matcher(header); matcher.matches(); String fileName = matcher.group(1); File file = new File(fileName); fileName = file.getName(); %> <html> <head> </head> <body bgcolor="#99aaff"> <br> <%=fileName%><br> <%=request.getParameter("fileComment")%> </body> </html> =入力.html= (文字制限のため一部) type="file" name="fileName" type="text" name="fileComment"

  • jspの文字化けについて

    javaでDBから取得したデータをjspで表示する際に 文字化けしてしまいます。化けるのは「~」です。 ちなみに文字コードはshift_JISです。 jspにcontentTypeなども記述してあるし、 色々なサイトを検索して、様々な方法を試したのですが・・。 どなたかご教授お願いします。

    • ベストアンサー
    • Java
  • EclipseでのJSP・Servlet開発について(文字化け)

    EclipseでJSP、Servletの開発をしております。 文字化けについての質問なのですが、ブラウザ上で表示される文字が 文字化けしてしまいます。JSPの頭に <%@page contentType="text/html; charset=SHIFT_JIS"%> と入れており、ブラウザでもエンコードはShift_JISとなっています。 自分なりに原因を調べたのですが、○○.jsp→○○_jsp.javaに変換?する際に 文字化けしているようで、Eclipse上でJSP、Servletを見ると普通なのですが、 ○○_jsp.javaは見事に文字化けしていました。 文字化けした○○_jsp.javaを削除して再度表示(_jsp.javaの再作成)も試みた のですが、同じ結果でした。 1ヶ月以上触っていないパッケージのソースも突然文字化けを起こしたので 原因も分からない状態です。 原因・直し方がお分かりの方、是非ともご指南下さい。 情報不足でしたら追記させて頂きますので、どうぞ宜しくお願い致します。

    • ベストアンサー
    • Java
  • モバイル端末の文字コードについて

    javaで作成した携帯のページがあり、htmlの<a>タグにクエリを使い値をjavaファイルに渡しているんですが、エンコードをしても文字化けしてしまいます。 UTF-8、SHIFT-JISでエンコードとデコードを試してみたのですが、SHIFT-JISではカタカナが文字化けしてしまい、UTF-8では全ての文字が文字化けしてしまいます。 フレームワークの仕様の都合上、クエリで渡すのが一番ベストの方法なので、なんとかクエリで文字化けせず渡したいのですが、どうにか良い策はないでしょうか?

    • ベストアンサー
    • Java
  • HTTPステータス 404 - /servlet/Testが表示される

    はじめまして。Javaの初心者です。 どうしてもわからないことがあります。それは、 最初にTest.jspを実行して送信ボタンを押すと、 サーブレットからforwardされてきた「あああああ」 が表示されるのですが、再び送信ボタンを押すと、 「HTTPステータス 404 - /servlet/Test」が表示 されます。なぜなのでしょうか?また、どのようにす れば、404エラーを出すことがなく実行できるのが どうか教えてください。お願いします。 ************************************************* <%-- Test.jsp --%> <%@ page contentType="text/html; charset=Shift_JIS" %> <html> <head> <title>Test</title> </head> <body> <form method="POST" action="/servlet/Test"> <input type="submit" name="submit" value="送信"/><br/> </form> <% if(request.getParameter("submit") != null) { %> <hr/> <%= (String)request.getAttribute("b") %> <% } %> </body> </html> ************************************************* import java.io.IOException; import javax.servlet.*; import javax.servlet.http.*; public final class Test extends HttpServlet { public void doPost ( HttpServletRequest request, HttpServletResponse response ) throws IOException,ServletException { request.setAttribute("b","あああああ"); ServletContext sc = this.getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher("/Test.jsp"); rd.forward(request,response); } } *************************************************

    • ベストアンサー
    • Java
  • jspでの表示の仕方

    下記のような、jspへの受け渡しができずにいます。 ご回答お願いします。 Servletは、 String query = "SELECT * FROM test"; ResultSet resultset = statement.executeQuery( query ); request.setAttribute("obj",resultset); ServletContext context = getServletContext(); RequestDispatcher rd = context.getRequestDispatcher("/kekka.jsp"); rd.forward(request,respons); とした時、jsp側で、 <%@ page contentType="text/html;charset=Shift_JIS" %> <%@ page import = "java.sql.*" %> <%! ResultSet rs = (ResultSet)request.getAttribute("obj"); %> <% While(rs.next()){String hinmei = rs.getString("hinmei");} %> <html> <head> <title>JSP</title> </head> <body> <table border="0"> <tr> <td><%=hinmei%></td> </tr> </table> </body> </html> と、したいのですが、白い画面になりjspの表示ができません。 やはり、ResultSetオブジェクトのAttributeはできないのでしょうか? それとも、jspの構文に問題があるのでしょうか? Vector、Stringは、この形のやり方で表示できたのですが・・・。 間違いを指摘してください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • データを拾うときに文字化け?

    現在、Webアプリケーションを作っているのですが文字化けが起こってしまいます。 データを追加するときは問題なし データを更新するときに発生 となるのですが、前者と後者で同じデータでも文字化けします。(この2つには相違点は必要部分以外はありません。) 更新の時には現データをフォームに表示させていますが、それが問題でしょうか? 例 (JSP内) <input type="text" value="ゼロ" name="aaa" /> (Java内) String name = request.getParameter("aaa") System.out.println(name); でデータを変更せず(しても)JSPで送信ボタンを押すとコマンドプロンプトには意味不明の文字列が出てきます 尚、全てのデータを拾うクラス(サーブレット)には request.setCharacterEncoding("Shift_JIS"); JSPには <%@page contentType="text/html; charset=ISO-2022-JP" pageEncoding="Shift_JIS" %> をつけています。 開発環境 WindowsXP Home Edition MySQL 4.0.26 Apache Tomcat 4.1 この原因や解決方法が分かれば教えてください。

    • ベストアンサー
    • Java
  • submitで日本語をおくりたい

    自分は現在JSPの勉強をしているのですが、JSPからサーブレットにsubmitをつかって、日本語を送信した場合文字化けして表示されてしまうので困っています。 ソースコードで説明させていただくと JSP側ソース <%@ page contentType="text/html;charset=Shift_JIS" pageEncoding="Shift_JIS" %> <html> <head><title>a</title></head> <body> <form action="Hello" method="post"> <textarea rows="10" cols="40" name="comment"> ここにコメントを書いて送信を押すとコメントがつきます </textarea><br> <input type="submit" value="送信"> </form> </body> </html> サーブレット側 import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class hello extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); response.setCharacterEncoding("Shift_JIS"); PrintWriter out = response.getWriter(); String msg = request.getParameter("comment"); out.println("<html>"); out.println("<head>"); out.println("<title>Hello World!</title>"); out.println("</head>"); out.println("<body>"); out.println(msg);//ここで表示 out.println("</body>"); out.println("</html>"); } } この様なソースを書いたのですが、サーブレット側で日本語を表示させようとすると、文字化けしてしまいます(英語は普通に表示されます)。 どのようにすれば、サーブレット側で日本語を表示できるのでしょうか? お返事おまちしております。

    • ベストアンサー
    • Java
  • setAttribute getAttribute 配列内容受け渡し  について 

    こんいちは。 setAttributeでセットした値をgetAttributeを使用して表示したいのですがうまくいきません。 あとsession.setAttributeとrequest.setAttributeの違いがわかりません。 session はなんとなくわかるのですが、requestがいまひとつわかりません。 どなたか教えていただけないでしょうか? よろしくお願いいたします。 下記がコーディングの内容です。 test.jsp <%@ page contentType="text/html;charset=Shift_JIS" import="java.sql.*, java.util.*" %> <% String[] desc={"aaa","bbb","ccc","ddd","eee"}; session.setAttribute("desc",desc); Vector vect = (Vector)session.getAttribute("dpt"); Iterator itr = vect.iterator(); while(itr.hasNext()) { String[] temp = (String[])itr.next(); out.println(temp[0]); out.println(temp[1]); } %> <html> <body> t_3 test </body> </html>

    • ベストアンサー
    • Java

専門家に質問してみよう