• ベストアンサー

Bean→JSPでの文字化け

こんにちは。 質問したいことがあります。 JSPで定義した全角文字列はそのままブラウザに表示されるのですが、Bean内で定義した全角文字が文字化けをしてしまいます。 文字化けは、JSPファイルからBeanのメソッドを使ってパラメータを取得する際に 発生します。 ----------------------例---------------------------------------- <jsp:useBean id="tBean" scope="session" class="test.testBean" /> <p>運勢は <em><%= tBean.getUnsei() %></em> です!</p> ------------------------------------------------------------------ ※getUnsei()はBean内で定義された全角文字を取得するメソッドで、このメソッドで取得した文字列が文字化け(?が多数出力される)します。ちなみに「運勢は」と「です!」という文字列は、そのまま文字化けせずに出力されます。 どう対処してよいか全く分かりません。 もし何か分かることがありましたらご教授御願い致します。

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

  • ベストアンサー
  • imamu252
  • ベストアンサー率40% (2/5)
回答No.3

何分情報が少なく的を得ていないかもしれませんが、 tBean.getUnsei() で表示される文字列は "??????????????" でしょうか? だとしたらエンコーディングを2回やっている可能性があります。JSPから受け取った文字列のエンコーディング処理を再度確認してみてください。

takekun22
質問者

お礼

問題解決しました! 原因は、Beanのメソッドから取得した文字列に対して、 str = new String(str.getBytes("8859_1"),"SJIS"); をしてなかった為に、文字化けが起こりました。 JSPファイルのBeanのメソッドから取得した文字列に対して、 この記述を加えるとうまく日本語(漢字含む)が表示されました。 今回はどうもありがとうございました。 また何かありましたら宜しく御願い致します。

takekun22
質問者

補足

回答ありがとうございます。 説明不足で申し訳ございません。 imamu252さんのおっしゃる通り、"?"が多数出力(¢のような記号を含む)されます。 今回のサンプルのシステムの流れは、 (1)HTMLで入力されたデータ(漢字含む)をサーブレットに渡す。 (2)サーブレットがHTMLよりデータを受け取り、そのデータを元にBeanを起動させる (3)Beanで処理された結果の一部をサーブレット→JSPに渡す (4)JSPより、処理されたBean内のメソッドを呼び、メソッドで取得した文字列をブラウザに表示する。 です。 (3)の処理された結果の一部(HTMLより受け取った文字列の表示)というのは、正しい結果が得られたのですが、 (4)の処理されたBean内のメソッドを呼び出して、文字列を出力する際に文字化けが起こっています。 エンコーディングについてですが、 (1)サーブレット内で、 response.setContentType("text/html;charset=Shift_JIS"); (2)JSPファイルの<HEAD>内で、 <%@ page contentType="text/html; charset=Shift_JIS" %> の2個所設定しています。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Harry_
  • ベストアンサー率55% (36/65)
回答No.2

質問を読むかぎり、Beanのコンパイル時にミスってる 以外に考えられないです。 Beanのソースコードのエンコーディングと、 コンパイルした環境のデフォルトのエンコーディングが 異なっている、ということはないですか?

takekun22
質問者

お礼

問題解決しました! 原因は、Beanのメソッドから取得した文字列に対して、 str = new String(str.getBytes("8859_1"),"SJIS"); をしてなかった為に、文字化けが起こりました。 JSPファイルのBeanのメソッドから取得した文字列に対して、 この記述を加えるとうまく日本語(漢字含む)が表示されました。 今回はどうもありがとうございました。 また何かありましたら宜しく御願い致します。

takekun22
質問者

補足

回答ありがとうございます。 Beanについてですが、ソースコードに <meta http-equiv="Content-Type" content="text/hmtl;charset=Shift_JIS"> や <%@ page contentType="text/html; charset=Shift_JIS" %> のようなコンテントタイプやキャラセットは設定していません。 サーブレットやJSPだけでなく、Beanにも設定する必要があるのでしょうか? ちなみに雑誌のサンプルコードをそのまま使っているのですが、 雑誌のサンプルコードのBeanの部分にはコンテントタイプやキャラセットは設定されていませんでした。

すると、全ての回答が全文表示されます。
  • wolv
  • ベストアンサー率37% (376/1001)
回答No.1

はずしていたらごめんなさい. Javaは文字コードとしてユニコードを使っているので, 目的の文字のユニコードが表示されようとしてるのではないでしょうか.

takekun22
質問者

お礼

問題解決しました! 原因は、Beanのメソッドから取得した文字列に対して、 str = new String(str.getBytes("8859_1"),"SJIS"); をしてなかった為に、文字化けが起こりました。 JSPファイルのBeanのメソッドから取得した文字列に対して、 この記述を加えるとうまく日本語(漢字含む)が表示されました。 今回はどうもありがとうございました。 また何かありましたら宜しく御願い致します。

takekun22
質問者

補足

回答ありがとうございます。 まだ文字化けの原因がよくわからないのですが、 エンコードについては、 (1)サーブレット内で、 response.setContentType("text/html;charset=Shift_JIS"); (2)JSPファイルの<HEAD>内で、 <%@ page contentType="text/html; charset=Shift_JIS" %> の2個所設定しています。 Bean内の文字列が文字化けしてしまうので、Bean内でもエンコードを設定する必要があるのでしょうか?

すると、全ての回答が全文表示されます。