アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。

サーブレットに質問したいことがあります。

以下のサンプルソースで、
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();
}
}
---------------------------------------------------

A 回答 (6件)

>>コンパイルしているのではないでしょうか?


>Linux上でソースを見てもキャラセットはShift_JISになっています。そしてそのままコンパイルし、ブラウザ(IE)に表示しています。

まさか、そんなことをしていたとは予想していませんでした。


Javaは基本的には Write Once, Run Anywhere です。
Linux上で再コンパイルする必要などないのです。

今回の場合は、Windows上でコンパイルして
*.classをLinuxに持っていってください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

問題解決しました!
yujiさんに指摘されたようにサンプルソースを
Windows上でコンパイルして*.classをLinuxに持っていくとうまくいきました。

今回は本当にどうもありがとうございました。
また何かありましたら宜しく御願い致します。

お礼日時:2002/05/15 09:14

プラットフォームのデフォルトでないエンコードで書かれたソースファイルを


コンパイルするときは、

javac -encoding Shift_JIS XXX.java

のようにエンコードの指定が必要です。

この回答への補足

回答ありがとうございます。

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上では処理が異なるのでしょうか?

補足日時:2002/05/15 09:14
    • good
    • 0

Linux上にソースを転送し、コンパイルしている、


とありますが、そのときに EUC のソースにして
コンパイルしているのではないでしょうか?

Shift-JIS で表示したいのなら、
Windows 環境でコンパイルして、
*.classファイルを Linux に持っていけばいいです。

Linux上で、EUCのソースをコンパイルしたいんだったら
EUC で表示すべきでしょう。
(Shift-JISで表示できなくもないですが、面倒です。)

この回答への補足

回答ありがとうございます。

>>Linux上にソースを転送し、コンパイルしている、
>>とありますが、そのときに EUC のソースにして
>>コンパイルしているのではないでしょうか?
Linux上でソースを見てもキャラセットはShift_JISになっています。そしてそのままコンパイルし、ブラウザ(IE)に表示しています。

>>Linux上で、EUCのソースをコンパイルしたいんだったら
>>EUC で表示すべきでしょう。
もしかしてwindows2000でサーブレットのファイルを作成し、それをファイル転送した後にLinux上でキャラセットをeuc-jpにしてコンパイルするということでしょうか?

補足日時:2002/05/14 13:05
    • good
    • 0

うーん。

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

この回答への補足

回答ありがとうございます。

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

補足日時:2002/05/14 13:20
    • good
    • 0

takekun22さんの環境はLinuxではなかったですか?


だとしたら、charset=Shift_JISじゃまずいのでは。
でも何で指定しなくても文字化けしないんでしょうね。

この回答への補足

回答ありがとうございます。

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の再起動を行っています。

補足日時:2002/05/14 11:10
    • good
    • 0

よく判りませんが、charsetは、httpのヘッダ(この場合はContentType)ではなく、htmlのヘッダの中にmetaタグの中などに入れてもよいのではないでしょうか?



こんな感じだったでしょうか?
<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=ShiftJIS">

または、両方入れならければならないとか?

よく判らないですけど…

この回答への補足

回答ありがとうございます。

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の再起動を行っています。

補足日時:2002/05/14 11:02
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!