カスタムタグで日本語の文字化けを解決する方法

このQ&Aのポイント
  • カスタムタグを使用して、パラメータから取得した日本語の文字化けを解決する方法を教えてください。
  • 具体的なソースコードとして、test.javaとtest.jspがあります。どのように修正すれば解決できるのでしょうか。
  • 解決方法として、test.javaのdoStartTagメソッド内で文字コード変換を行うことで、文字化けを解消することができます。具体的には、this.testStr.getBytes("8859_1")の後に文字コードを指定し、pageContext.getOut().write()で出力する文字コードを指定する必要があります。
回答を見る
  • ベストアンサー

カスタムタグで日本語の文字化けを解決できない

カスタムタグでパラメータから取得した日本語の文字化けを解決できません。 実行しているのは以下のソースです。 test.java package test; public class test extends javax.servlet.jsp.tagext.TagSupport{ private static final long serialVersionUID=1L; private String testStr; public void setTestStr(String testStr){ this.testStr=testStr; } //タグの開始時に実行されるメソッド public int doStartTag() throws javax.servlet.jsp.JspException{ try{ response.setContentType("text/html;charset=UTF-8"); pageContext.getOut().write(new String(this.testStr.getBytes("8859_1"),"JISAutoDetect")); }catch(java.io.IOException e){ throw new javax.servlet.jsp.JspException(e.getMessage()); } return SKIP_BODY; } } test.jsp <%@ page contentType="text/html;charset=UTF-8"%> <%@ taglib uri="custom" prefix="custom"%> <html> <head><title>test</title></head> <body> <custom:test testStr="${param.test}" /> </body> </html> どのようにすれば解決できるでしょうか。

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

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

  • ベストアンサー
  • osumitan
  • ベストアンサー率33% (102/307)
回答No.1

> pageContext.getOut().write(new String(this.testStr.getBytes("8859_1"),"JISAutoDetect")); "JISAutoDetect"じゃなく"UTF-8"とか。

izayoimizuki
質問者

お礼

そのあたりを色々変えて試してみたところ解決しました。 ありがとうございます。

関連するQ&A

  • LINUX文字化け

    こんにちは。 いつも勉強させていただいています。 質問があるのでよろしくお願いします。 以下のjsp、サーブレットプログラムによって DBアカウント"DBtest"のテーブル"test"に 2バイト文字を登録すると"?"と文字化けしてしまいます。 文字化けせず登録する方法(コーディング) を教えていただけないでしょうか 非常に困っております。 ご回答よろしくお願いします。 【環境】 データベース MYSQL 4.1.1 TOMCAT 4.1.31 【手順】 1. http://ドメイン/コンテキスト/test.jspにアクセス 2. 2バイト文字をテキストボックスに入力する。 3. 送信ボタンを押下する。 確認:mysqlにログインし"select * from test"    とコマンドを入力し実行する。 結果:2バイト文字の部分が"?"となっている。 ------------test.jsp--------------- <html> <head></head> <body> <form action="test" method="post" > <input type="text" name="test"> <input type="submit" value="送信"> </form> </body> </html> --------test.java-------- import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletException; import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.RequestDispatcher; import java.io.PrintWriter; import java.sql.*; import java.util.*; public class test extends HttpServlet { String testStr="";   Connection con_info = null; Statement stmt = null; ResultSet rs_master = null;   ResultSet rs_transaction = null; Exception exception; public void doPost( HttpServletRequest req, HttpServletResponse res ) throws Exception { req.setCharacterEncoding( "Shift_JIS" ); res.setContentType( "text/html; charset=Shift_JIS" ); testStr=req.getParameter("test"); try { Class.forName( "com.mysql.jdbc.Driver" ); String jdbcurl = "jdbc:mysql://localhost/DBtest"; Properties props = new Properties(); props.put("user", "root"); props.put("password", "password"); props.put("useUnicode", "true"); props.put("characterEncoding", "Shift_JIS"); con_info = DriverManager.getConnection( jdbcurl, props ); String sql="insert into test(input_str) values('"+testStr+"')"; stmt = con_info.createStatement(); int kekka = stmt.executeUpdate(sql);    //省略 } catch(Exception e) { //省略(エラー画面遷移するコード) } } } -------------------------------------------------------

    • ベストアンサー
    • 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で文字化けするのです

    がどうしたらいいでしょうか? Java1.6.0_13&Tomcat6.0.18をEclipse3.42で動かしています。 以下のJSPを実行してみると文字化けします。 よろしくお願いします。 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/WEB-INF/tld/struts-bean.tld" prefix="bean"%> <!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=UTF-8"> <title>Java JakartaStruts</title> </head> <body> <bean:include id="page2" href="http://www.google.co.jp/" /> <%=page2%> </body> </html>

    • ベストアンサー
    • Java
  • 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
  • 文字化け対策について

     JSPに文字コードを指定しているにも関わらず、  「Java側でUTF-8の文字コードを指定してあげなければ、画面遷移した画面遷移先で文字化けが起こってしまう。」という状況なのですが、これの解決方法は無いものでしょうか? 【文字エンコード状況】 ●JSP  JSP側では、画面遷移元、画面遷移先の両方とも 文字コード「UTF-8で指定」しています。 <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> ●Java  Java側では、  response.setContentType("text/html; charset=UTF-8");//コンテンツタイプ  request.setCharacterEncoding("UTF-8"); //コード変換    という2点をコード変換として記述しています。 【値受け渡し状況(画面表示状況)】 ●1 画面遷移元 画面1(JSP)  <input type="text" value="あいうえお" name="name1"> ●2 java(servlet)  → 画面1のname1の“あいうえお”を受取る  String strName = new String(request.getParamete("name1")); request.setAttribute("name", strName);    ●3 画面遷移先 画面2(JSP) → “あいうえお”を表示  <%= (String)request.getAttribute("name1") %>            画面状況:文字化けしている。[ォ・・サウ」(といった感じです)   ●現状の解決方法  ここで、文字化けの解決方法として、  画面1のリクエストをゲットする際に、 java(servlet)での、文字の受け取り方の記述を変更しました。  String strName = new String(request.getParamete("name1"));    から    String struserName = new String(request.getParamete("name").getBytes("ISO-8859-1"),"UTF-8");    という風に「 .getBytes("ISO-8859-1"),"UTF-8") 」 を付与してやることで、回避でききました。が、これで解決策としては妥当でしょうか?(正しいでしょうか?)    気にかかっているところが、どうもこのやり方が強引に文字を変換しているようにしか思えませんでして(実際のところは正しいのかもしれませんが・・・)このまま値を渡してやっていいのか判別が付かずに困っています。    この方法でも大丈夫でしょうか?  特別、何か問題というのはありませんでしょうか?

    • ベストアンサー
    • Java
  • jspの文字化けの解消方法を教えてください

    input.jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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=UTF-8"> <title>Insert title here</title> </head> <body> <form action="result.jsp" method="post"> <input type="text" name="name"> <input type="submit" value="送信" name="submit"> </form> </body> </html> result.jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <!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=UTF-8"> <title>Insert title here</title> </head> <body> あなたの名前は<c:out value="${param.name}" />です。 </body> </html> 以上のJSPにおいてinput.jspを実行して表示されるフォームに 日本語を入力するとresult.jspにおいてその出力が文字化けします。 この問題の解消方法を教えてください。

    • ベストアンサー
    • Java
  • Apache+TomcatでGET送信すると文字化けする

    下記の構成で開発をしています。 Apache2.0.54 j2sdk1.4.2_08 Tomcat5.0.28 JK2 Tomcat単独では、GETで送信した日本語でも取得できましたが、 Apacheを通すと文字化けしてしまいます。 何か良い解決方法等ありましたらお教えください。 【送信】 <form action="test.jsp" method="GET"> <INPUT type="text" name="test" value="てすと" /> <input type="submit" value="submit"> </form> 【受信】 <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <% request.setCharacterEncoding("UTF-8"); String sTest = ""; sTest = request.getParameter("test"); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"> <title>test</title> </head> <body> <%= sTest %> </body> </html> 【表示結果】 てすと.

  • 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
  • servletからjspへの遷移時に文字化け

    質問します。 用件:servletからjspに遷移する際に文字化けが発生します。 環境: Eclipse3.7 java6 ApacheTomcat7.0 フレームワークはなし 内容: フォワードでTest.jspに遷移します。 RequestDispatcher requestdispatcher = request.getRequestDispatcher("/Test.jsp"); requestdispatcher.forward(request, response); Test.jspに遷移すると、Test.jspの「<body>テスト</body>」がブラウザ表示時に文字化けします。 (英数字は化けません。) servletを使用せず、Test.jspに直接アクセスすると文字化けが起きません。 servletで、Test.jspで適当なhiddenを作成し、servletでgetParameterをSystem.out.printしても 文字化けなどはおきません。 また、RequestDispatcherでは文字化けが起こりますが、 response.sendRedirect("/Test.jsp"); だと文字化けがおきません。 現状、sendRedirectとsessionを使用して値の受け渡しを行っておりますが、 RequestDispatcherを使用したいので困っております。 また文字コードは javaファイルそのものはSJIS jspは<%@ page language="java" contentType="text/html; charset=SJIS" %> となっております。 わかりにくい文章で申し訳ありませんが、ご回答の程よろしくお願いします。

    • ベストアンサー
    • Java
  • 「サーブレットは現在利用できません」のエラーが出てしまいます。

    Java初心者の者です。 先日会社の研修でTomcatを触ったばかりで、会社では何とか 周りに聞きつつ出来たのですが、家で復習しようと思って 同じ操作をしてブラウザで画面を表示しようとしたら、 「サーブレット gotoNext は現在利用できません」 というエラーが出てしまいました。 どこを修正すればちゃんと表示されるのでしょうか? まだ「やさしいJava」が終わったばかりで サーブレットやJSPの用語がほとんど分からないので、 分かりやすく説明していただけると嬉しいです。 ***** input.jsp ********************************************* <%@ page language="java" contentType="text/html; charset=windows-31j" pageEncoding="windows-31j"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-31j"> <title>Insert title here</title> </head> <body bgcolor="skyblue"> Hello JSP World!!<br> <form action="/scud/next" method="post"> <input type="submit" value="送信"> </form> </body> </html> ***** next.jsp ********************************************** <%@ page language="java" contentType="text/html; charset=windows-31j" pageEncoding="windows-31j"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-31j"> <title>Insert title here</title> </head> <body bgcolor="yellowgreen"> Hello Another JSP World!! </body> </html> ******* GotoNextServlet.java ********************************* package sevlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class GotoNextServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ System.out.println("★GotoNextServlet#doPostが呼ばれた!"); } } ******* web.xml ********************************************* <?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>gotoNext</servlet-name> <servlet-class>servlet.GotoNextServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>gotoNext</servlet-name> <url-pattern>/next</url-pattern> </servlet-mapping> </web-app> *************************************************************

    • ベストアンサー
    • Java

専門家に質問してみよう