- ベストアンサー
文字化けで困っている人必見!文字化けの原因と解決方法
- JSPでrequest.getParameterを使用している際に起こる文字化けの原因と解決方法について教えてください。
- eclipse 3.5で文字化けが発生している場合、何が原因である可能性があり、どのように解決したら良いのか知りたいです。
- 文字化けが起こるJSPのコード部分に問題がある可能性があります。具体的には、contentTypeがShift-JISであることや、<html:form>タグの閉じ忘れなどが考えられます。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
> <%@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つね。 その後再表示すると直るかも。
その他の回答 (7)
- askaaska
- ベストアンサー率35% (1455/4149)
ブラウザの表示エンコーディングがUTF-8なのに化けてるってことは JSPがShift_JISで保存されているとか?
- yuki4499
- ベストアンサー率62% (10/16)
1.eclipse 3.5を開いてウィンドウより設定を開く 2.サーバーのインストール済みランタイム環境を開く 3.Apache Tomcat v5.5を選択し消去 4.その後追加を押し、Apache の中のApache Tomcat v5.5を選択 5.新規サーバーランタイムのワークベンチデフォルトJREを jdk1.6.0_13(環境依存)に設定して完了する いつも自分はこうやって直しています。 正直もっとスマートなやり方があると思われますがJavaは 専門分野ではないので不格好な方法で失礼
- yuki4499
- ベストアンサー率62% (10/16)
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を直接編集すれば文字化けを防げるかも・・・
補足
ご回答ありがとうございます。 「C:\eclipse\workspace\サーバー\Tomcat v5.5 サーバー @ localhost-config の中のserver.xml」を直接編集したのですが結果は同じで 申し訳ありませんが、「eclipse 3.5を使用する際にTomcatを読み込んだと思いますが、それをもう一度やり直す必要があります。」というのがよく分からないので具体的な方法をお教えいただけると、 ありがたいです。 よろしくお願いします。
- yuki4499
- ベストアンサー率62% (10/16)
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の再読み込み忘れないように
補足
ご回答ありがとうございます。 useBodyEncodingForURI="true" なのですが、入力していました。
- askaaska
- ベストアンサー率35% (1455/4149)
その文字化けは UTF-8のテキストをShift_JISで表示しようとすると出る タイプね。 つまり、サーバからブラウザに転送されているデータは UTF-8になっているってことね。 JSPファイルがUTF-8で保存されているでしょ? それが原因よ。 pageディレクティブにpageEncodingでファイルの保存エンコーディングである UTF-8を指定してあげるといいわ。
補足
ご回答ありがとうございます。返答が遅れてすみません。 <%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>を 早速試したのですが、結果は同じでした。
- askaaska
- ベストアンサー率35% (1455/4149)
ぶっちゃけ 「JSP 文字化け」だけでぐぐれば解法は見つかるのよ。 そこに「ISO-8859-1」を入れても変わらないけど。 実際にぐぐって見ればわかるけど 文字化けにはいろいろ種類・パターンがあるのよ。 どんな風に文字化けしているのか私には見えないから 具体的な施策を提示することは無理なのよ。 せめてどんな風に文字化けするのか教えてくれないかしら。 まずはそこからはじめましょう。
補足
「赤」の出力が、UTF-8の「襍、」で出力されます。 request.setCharacterEncoding("Shift_JIS"); などを使ったのですが、変換されず「襍、」のままです。 server.xmlの方の<Connecter ~>にも useBodyEncodingForURI="true" を追記したりしましたが、 駄目でした。
- askaaska
- ベストアンサー率35% (1455/4149)
ヒント GETで送られた日本語の文字コードは ISO-8859-1
補足
ご回答ありがとうございます。 申し訳ありません。いろいろと試したのですが、JSPがコンパイルできないなどのエラーに引っ掛かり、どうしたらいいのか分からなくなってしまいました。 もうすこしご教授お願いできませんでしょうか?
補足
ご回答ありがとうございます。 ブラウザで右クリック>エンコードで確認したのですが、UTF-8でした。 また、javaファイルとeclipseのナビゲーターからclassファイルを削除したのですが、変わりませんでした。 報告が遅れてしまっていました。一応お伝えしておきます。他の二つのJSPでは<input type・・・>からのrequest.getParameterは成功しています。