文字化けで困っている人必見!文字化けの原因と解決方法

このQ&Aのポイント
  • JSPでrequest.getParameterを使用している際に起こる文字化けの原因と解決方法について教えてください。
  • eclipse 3.5で文字化けが発生している場合、何が原因である可能性があり、どのように解決したら良いのか知りたいです。
  • 文字化けが起こるJSPのコード部分に問題がある可能性があります。具体的には、contentTypeがShift-JISであることや、<html:form>タグの閉じ忘れなどが考えられます。
回答を見る
  • ベストアンサー

文字化けで困っています。

文字化けで困っています。 下記の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
  • 回答数8
  • ありがとう数2

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

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.7

> <%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %> JSPはUTF-8で保存されているのよね? で、ブラウザではちゃんとUTF-8で表示できているかしら。 ブラウザで右クリック>エンコードで確認してみて? 多分Shift_JISになってしまっているでしょう。 > <%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %> に変更したあと、一度Tomcatのワークを削除してみて。 具体的には、JSPがコンパイルされてできたjavaファイルとclassファイルの2つね。 その後再表示すると直るかも。

TKO_1988
質問者

補足

ご回答ありがとうございます。 ブラウザで右クリック>エンコードで確認したのですが、UTF-8でした。 また、javaファイルとeclipseのナビゲーターからclassファイルを削除したのですが、変わりませんでした。 報告が遅れてしまっていました。一応お伝えしておきます。他の二つのJSPでは<input type・・・>からのrequest.getParameterは成功しています。

その他の回答 (7)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.8

ブラウザの表示エンコーディングがUTF-8なのに化けてるってことは JSPがShift_JISで保存されているとか?

  • yuki4499
  • ベストアンサー率62% (10/16)
回答No.6

1.eclipse 3.5を開いてウィンドウより設定を開く 2.サーバーのインストール済みランタイム環境を開く 3.Apache Tomcat v5.5を選択し消去 4.その後追加を押し、Apache の中のApache Tomcat v5.5を選択 5.新規サーバーランタイムのワークベンチデフォルトJREを  jdk1.6.0_13(環境依存)に設定して完了する いつも自分はこうやって直しています。 正直もっとスマートなやり方があると思われますがJavaは 専門分野ではないので不格好な方法で失礼

参考URL:
http://www.searchman.info/java_eclipse/1090.html
  • yuki4499
  • ベストアンサー率62% (10/16)
回答No.5

useBodyEncodingForURI="true" については補足的な説明なのでどうでもいいです。 やってるのは下の回答部分で確認してるので。 問題なのはそれをちゃんと反映させているかどうかです。 初心者がよくやることですが、Tomcatの設定を直してそれで終わりという人が結構多いという点を心配しています。 あなたが直したserver.xmlはTomcatなのかeclipse 3.5のほうなのかが一番の疑問点です。 Tomcatのserver.xmlを直してもeclipse 3.5で開発をしているのならまったく意味がありません。 eclipse 3.5を使用する際にTomcatを読み込んだと思いますが、それをもう一度やり直す必要があります。 それかやったことはないですがC:\eclipse\workspace\サーバー\Tomcat v5.5 サーバー @ localhost-config の中のserver.xmlを直接編集すれば文字化けを防げるかも・・・

TKO_1988
質問者

補足

ご回答ありがとうございます。 「C:\eclipse\workspace\サーバー\Tomcat v5.5 サーバー @ localhost-config の中のserver.xml」を直接編集したのですが結果は同じで 申し訳ありませんが、「eclipse 3.5を使用する際にTomcatを読み込んだと思いますが、それをもう一度やり直す必要があります。」というのがよく分からないので具体的な方法をお教えいただけると、 ありがたいです。 よろしくお願いします。

  • yuki4499
  • ベストアンサー率62% (10/16)
回答No.4

Postで送ればその現象は防げたはず。 Tomcat5の仕様でGETで送った場合の文字列のデコードに必ずISO8859-1が使われる。 サーブレット中でエンコーディングをかけてもデフォルトは無視されるので C:\Apache\Tomcat 5.5\confのserver.xmlの中身の <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 --> <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" の後に useBodyEncodingForURI="true"/> をつけてやれば後はサーブレットのほうでSetCharacterEncoding()でいけたはず。 eclipse使ってるならTomcatの再読み込み忘れないように

TKO_1988
質問者

補足

ご回答ありがとうございます。 useBodyEncodingForURI="true" なのですが、入力していました。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.3

その文字化けは UTF-8のテキストをShift_JISで表示しようとすると出る タイプね。 つまり、サーバからブラウザに転送されているデータは UTF-8になっているってことね。 JSPファイルがUTF-8で保存されているでしょ? それが原因よ。 pageディレクティブにpageEncodingでファイルの保存エンコーディングである UTF-8を指定してあげるといいわ。

TKO_1988
質問者

補足

ご回答ありがとうございます。返答が遅れてすみません。 <%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>を 早速試したのですが、結果は同じでした。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

ぶっちゃけ 「JSP 文字化け」だけでぐぐれば解法は見つかるのよ。 そこに「ISO-8859-1」を入れても変わらないけど。 実際にぐぐって見ればわかるけど 文字化けにはいろいろ種類・パターンがあるのよ。 どんな風に文字化けしているのか私には見えないから 具体的な施策を提示することは無理なのよ。 せめてどんな風に文字化けするのか教えてくれないかしら。 まずはそこからはじめましょう。

TKO_1988
質問者

補足

「赤」の出力が、UTF-8の「襍、」で出力されます。 request.setCharacterEncoding("Shift_JIS"); などを使ったのですが、変換されず「襍、」のままです。 server.xmlの方の<Connecter ~>にも useBodyEncodingForURI="true" を追記したりしましたが、 駄目でした。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

ヒント GETで送られた日本語の文字コードは ISO-8859-1

TKO_1988
質問者

補足

ご回答ありがとうございます。 申し訳ありません。いろいろと試したのですが、JSPがコンパイルできないなどのエラーに引っ掛かり、どうしたらいいのか分からなくなってしまいました。 もうすこしご教授お願いできませんでしょうか?

関連するQ&A

  • データを拾うときに文字化け?

    現在、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
  • [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
  • サーブレットの文字化け

    こんにちは。 JAVAサーブレット時の文字化けで困っています。 環境 ≪サーバー≫ OS:Linux Tomcat4.1.31 JAVA1.4.2 ≪クライアント≫ OS:Windows2000 クライアントからhttp:192.168.X.X:8080/xxx.jspを呼び出して実行しています。 JSPファイル(Shift-JISで保存)からサーブレットを呼び出して サーブレットでrequest.getParameterをした時に、日本語が文字化けしてしまいます。 JSPファイルでは <%@ page language="java" contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J"%> を指定しています。 なにかわかりましたら教えてください。 よろしくお願いします。

    • ベストアンサー
    • 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
  • 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
  • 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> 【表示結果】 てすと.

  • テキストを表示すると文字化けする

    まず、HTMLから !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=windows-31j"> <title>メール送信フォーム</title> </head> <body> <h2>メール送信フォーム</h2> <form action="conf.jsp" method="POST"> <table summary="" border="0"> <tr> <td>お名前</td> <td><input type="text" name="name" size="20"></td> </tr> <tr> <td>メールアドレス</td> <td><input type="text" name="from" size="20"></td> </tr> <tr> <td>メールタイトル</td> <td><input type="text" name="title" size="20"></td> </tr> <tr> <td>メッセージ</td> <td><textarea rows="5" name="message" cols="40"></textarea></td> </tr> <tr> <td colspan="2"><input type="submit" value="内容の確認"></td> </tr> </table> </form> </body> </html> それを受けるconf.jspで文字化けします。 が、1つ文字化けせずに表示する方法があります。 <%@ page language="java" contentType="text/html; charset=Shift_JIS" pageEncoding="Shift_JIS"%> <!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> <h2>メール送信内容確認画面</h2> <% request.setCharacterEncoding("Shift-JIS"); ↑ここですね↑見にくくてすいません。 ここでShift_JISに変換されてちゃんと表示されます。 でも、これは後から付け加えたものでソースコードには最初ありませんでした。 //フォームの値を取得 String mName = request.getParameter("name"); String mFrom = request.getParameter("from"); String mTitle = request.getParameter("title"); String mNaiyou = request.getParameter("message"); //値をチェック boolean errFlg = false; if (mName.equals(" ")) { out.println("<p>お名前を入力して下さい。"); errFlg = true; } if (mFrom.equals(" ")) { out.println("<p>メールアドレスを入力して下さい。"); errFlg = true; } if (mTitle.equals(" ")) { out.println("<p>タイトルを入力して下さい。"); errFlg = true; } if (mNaiyou.equals(" ")) { out.println("<p>内容を入力して下さい。"); errFlg = true; } if (errFlg == false) { %> <h2>内容を確認して送信ボタンをクリックして下さい</h2> <form action="sendMail.jsp" method="POST"> <table border="0"> <tr> <td width="100">お名前</td> <td width="300"><%= mName %></td> </tr> <tr> <td width="100">メールアドレス</td> <td width="300"><%= mFrom %></td> </tr> <tr> <td width="100">メールタイトル</td> <td width="300"><%= mTitle %></td> </tr> <tr> <td width="100">メッセージ</td> <td width="300"><%= mNaiyou %></td> </tr> <tr> <td colspan="2"><input type="submit" value="送信"></td> </tr> </table> <input type="hidden" name="name" value="<%= mName %>"> <input type="hidden" name="from" value="<%= mFrom %>"> <input type="hidden" name="title" value="<%= mTitle %>"> <input type="hidden" name="message" value="<%= mNaiyou %>"> </form> <% }%> </body> </html> 何故、文字化け状態になるのでしょう。 アドバイス宜しくお願い致します。

  • 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
  • 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
  • JSP>errorPageで指定したページが文字化けしてしまう

    WindowsXP+tomcat5.0.28にて hello.jsp -------------------------------------------------------------- <%@ page language="java" contentType="text/html;charset=Windows-31J"%> <%@ page errorPage="error.jsp" %> error.jsp ------------------------------------------------------------- <%@ page language="java" contentType="text/html;charset=Windows-31J"%> <%@ page isErrorPage="true" %> ---------------------------------------------------------------------- hello.jspの中で例外が発生するとerror.jspが呼ばれますが、error.jspの内容が文字化けしてブラウザに表示されます。 でも、error.jspを直接ブラウザから呼ぶと文字化けが起きません。 JSPの例外処理機構で呼ばれた時だけ文字化けしているように見えます。解決方法ありますか?

専門家に質問してみよう