Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

サーブレットについて

こんにちは。 サーブレットに質問したいことがあります。 以下のサンプルソースで、 response.setContentType("text/html;charset=Shift_JIS"); の部分があるのですが、このようにすると日本語が文字化けしてしまいます。 ちなみにresponse.setContentType("text/html); とすると、日本語も文字化けせずに正しく表示されます。 ここで質問なのですが、 サーブレットの場合はJSPと違い、charsetを指定しなくてもよろしいのでしょうか? 何か分かることがありましたらご教授御願い致します。 ---------☆サンプルソース(HelloWorldExample.java)☆---------------- import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorldExample extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html;charset=Shift_JIS"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>ハローワールド</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>HelloWorld ハローワールド</h1>"); out.println("</body>"); out.println("</html>"); out.close(); } } ---------------------------------------------------

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

  • ベストアンサー
  • yuji
  • ベストアンサー率37% (64/169)
回答No.6

>>コンパイルしているのではないでしょうか? >Linux上でソースを見てもキャラセットはShift_JISになっています。そしてそのままコンパイルし、ブラウザ(IE)に表示しています。 まさか、そんなことをしていたとは予想していませんでした。 Javaは基本的には Write Once, Run Anywhere です。 Linux上で再コンパイルする必要などないのです。 今回の場合は、Windows上でコンパイルして *.classをLinuxに持っていってください。

takekun22
質問者

お礼

回答ありがとうございます。 問題解決しました! yujiさんに指摘されたようにサンプルソースを Windows上でコンパイルして*.classをLinuxに持っていくとうまくいきました。 今回は本当にどうもありがとうございました。 また何かありましたら宜しく御願い致します。

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

その他の回答 (5)

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

プラットフォームのデフォルトでないエンコードで書かれたソースファイルを コンパイルするときは、 javac -encoding Shift_JIS XXX.java のようにエンコードの指定が必要です。

takekun22
質問者

補足

回答ありがとうございます。 Windows上ではHarry_さんが教えてくださった javac -encoding Shift_JIS XXX.java でコンパイルできたのですが、 Linux上では下記のようなエラーが発生しました ----------------------------------------------------------------- Kjc: unrecognized option ''-encoding'' java.lang.NullPointerException at at.dms.util.Options.parseCommandLine(Options.java:72) at at.dms.kjc.Main.parseArguments(Main.java:164) at at.dms.kjc.Main.run(Main.java:52) at at.dms.kjc.Main.compile(Main.java:255) at at.dms.kjc.Main.main(Main.java:246) ----------------------------------------------------------------- TomcatはWindow上とLinux上では処理が異なるのでしょうか?

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

Linux上にソースを転送し、コンパイルしている、 とありますが、そのときに EUC のソースにして コンパイルしているのではないでしょうか? Shift-JIS で表示したいのなら、 Windows 環境でコンパイルして、 *.classファイルを Linux に持っていけばいいです。 Linux上で、EUCのソースをコンパイルしたいんだったら EUC で表示すべきでしょう。 (Shift-JISで表示できなくもないですが、面倒です。)

takekun22
質問者

補足

回答ありがとうございます。 >>Linux上にソースを転送し、コンパイルしている、 >>とありますが、そのときに EUC のソースにして >>コンパイルしているのではないでしょうか? Linux上でソースを見てもキャラセットはShift_JISになっています。そしてそのままコンパイルし、ブラウザ(IE)に表示しています。 >>Linux上で、EUCのソースをコンパイルしたいんだったら >>EUC で表示すべきでしょう。 もしかしてwindows2000でサーブレットのファイルを作成し、それをファイル転送した後にLinux上でキャラセットをeuc-jpにしてコンパイルするということでしょうか?

すると、全ての回答が全文表示されます。
noname#2494
noname#2494
回答No.3

うーん。私にはよく分からないのですが、LinuxだとShiftJISは危ないのだとしたら、EUC-JPにしてはどうでしょうか?

takekun22
質問者

補足

回答ありがとうございます。 よく分からないことがあるのですが、 window上でサーブレット(*.java)のファイルを作成した場合、キャラセットをShift_JISにするというのはわかるのですが、そのファイルをLinux上でコンパイルして、ブラウザ(IE)で表示するには、キャラセットをeux-jpにしないといけないのでしょうか?

すると、全ての回答が全文表示されます。
  • Harry_
  • ベストアンサー率55% (36/65)
回答No.2

takekun22さんの環境はLinuxではなかったですか? だとしたら、charset=Shift_JISじゃまずいのでは。 でも何で指定しなくても文字化けしないんでしょうね。

takekun22
質問者

補足

回答ありがとうございます。 response.setContentType("text/html); をなくし、 <META HTTP-EQUIV="content-type" CONTENT="text/html;charset=ShiftJIS"> を指定してもうまくいきました。 専門書を参考にすると、 response.setContentType("text/html;charset=ShiftJIS"); <META HTTP-EQUIV="content-type" CONTENT="text/html;charset=ShiftJIS"> の2つが指定されていますが、このようにすると日本語が文字化けします。 なぜなのでしょうか? ちなみに自分は (1)サーブレット、JSPのファイルはWindows2000上で作成し、 (2)ホームページビルダーのファイル転送の機能を使って、Linux上にファイルを転送し、 (3)Linux上でサーブレット(*.java)をコンパイルして、Tomcatの再起動を行っています。

すると、全ての回答が全文表示されます。
noname#2494
noname#2494
回答No.1

よく判りませんが、charsetは、httpのヘッダ(この場合はContentType)ではなく、htmlのヘッダの中にmetaタグの中などに入れてもよいのではないでしょうか? こんな感じだったでしょうか? <META HTTP-EQUIV="content-type" CONTENT="text/html; charset=ShiftJIS"> または、両方入れならければならないとか? よく判らないですけど…

takekun22
質問者

補足

回答ありがとうございます。 response.setContentType("text/html); をなくし、 <META HTTP-EQUIV="content-type" CONTENT="text/html;charset=ShiftJIS"> を指定してもうまくいきました。 専門書を参考にすると、 response.setContentType("text/html;charset=ShiftJIS"); <META HTTP-EQUIV="content-type" CONTENT="text/html;charset=ShiftJIS"> の2つが指定されていますが、このようにすると日本語が文字化けします。 なぜなのでしょうか? ちなみに自分は (1)サーブレット、JSPのファイルはWindows2000上で作成し、 (2)ホームページビルダーのファイル転送の機能を使って、Linux上にファイルを転送し、 (3)Linux上でサーブレット(*.java)をコンパイルして、Tomcatの再起動を行っています。

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

関連するQ&A