- 締切済み
文字化けします
またまた質問で申し訳ないんですが、よろしくお願いします。 Servletで表示させる文字が化けます。 ServletのdoGet()を呼び出しています。 ServletをURLにて直接呼び出しているので、doGetで間違いないと思います。記述としては、 response.setContentType(text/html;charset=Shift_JIS); と記述しています。 過去の質問等も調べて、byteに変換してJISAutoDetectを指定しても直りませんでした。 str = new String(str.getBytes("iso-8859-1"), "JISAutoDetect")としました。 8859-1も、同様に駄目でした。 そして、tomcatを起動した時に出るDos窓に 「Unsuported encoding: Shift_JIS」 と出ているのですが、tomcat3-1-4ではサポートされてないのでしょうか?? なんとか、解決策ってないでしょうか? 教えてください。よろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
文字化けの原因を探るほうは、ちょっと行き詰まってしまいました。 (Tomcatのバージョンをあげていただくか、それでだめならソースを見て考えるしか、私には思いつきません…) 気にされているログファイルの内容ですが、 Starting endpoint port="8080" handler="org.apache.tomcat.service.http.HttpConnectionHandler" Starting endpoint port="8007" handler="org.apache.tomcat.service.connector.Ajp12ConnectionHandler" この2行に関しては、エラーではなくTomcatが使用しているポート番号と、クラス名です。(ご存知だとは思いますが、TomcatはJavaで記述されています) Tomcatを起動して、ブラウザで確認する場合に http://localhost:8080/ と入力されると思いますが、この「8080」が、Tomcatのサービスのポート番号です。 他の内容に関してもエラーではなく、Tomcatの自身の設定を表示しているだけですのでご安心下さい。 TOMCAT_HOME\conf\server.xmlで設定している内容の一部ですので、こちらのファイルを一度覗いてみてください。 では、お役に立てずにすみませんが、がんばってください。
補足です。 もしJDK1.2.×を使っていらっしゃるのなら str.getBytes("iso-8859-1")を str.getBytes("iso8859-1") か str.getBytes("iso8859_1")に してみてください。 どうも、JDKのバージョンによってエンコーディング名が違うようです。 参考までに。
ひとつ確認していただきたいのですが、お使いのJDKのバージョンは何でしょうか。 str = new String(str.getBytes("iso-8859-1"), "JISAutoDetect") を TOMCAT3.2.4+JDK1.2.2で試してみると確かにgetBytes()のあたりでエラーがでました。 TOMCAT3.2.4+JDK1.3.0で試すとエラーが出ませんでした。 JDK1.2.×をお使いでしたらJDK1.3.×にしてみてください。 参考までに。
補足
おはようございます。 返事が遅くなりました。 jdkの方は、1.3を使用しています。 >TOMCAT3.2.4+JDK1.2.2で試してみると確かに >getBytes()のあたりでエラーがでました。 そうなんです。私も、そこでエラーでます。 でも、問題の切りわけを考えると、とりあえずTOMCAT自体 が怪しいかなと思っています。 それと、TOMCAT起動時の画面に表示される内容が正常でないような気がします。下記の通りですが、エラーが出ているのでlogs/tomcat.logを見ろ。みたいな。 ■■■■■■■■■■tomcat起動時画面■■■■■■■■ Context log: path="/examples" Adding context path="/examples" docBase="webapps/examples" Context log: path="/XmlServlet" Adding context path="/XmlServlet" docBase="webapps/XmlSe vlet" Context log: path="" Adding context path="" docBase="webapps/ROOT" Context log: path="/test" Adding context path="/test" docBase="webapps/test" Starting tomcat. Check logs/tomcat.log for error messages ■■■■■■■■■■■■■■■■■■■■■■■■■■ しかし、一応起動は出来ています。 それと、現在URLの指定にIPアドレスを指定しています。 localhostを指定すると表示できません。 これも、何か設定がおかしいのでしょうか? tomcat.logも下記に記します。 ★★★★★★★tomcat.log内容★★★★★★★★★★★★ Starting tomcat install="C:\tomcat" home="C:\tomcat" classPath="C:\tomcat\classes;C:\tomcat\lib\webserver.jar;C:\tomcat\lib\jasper.jar;C:\tomcat\lib\xml.jar;C:\tomcat\lib\servlet.jar;C:\jdk1.3\lib\tools.jar;D:\javamail\javamail-1.2\mail.jar;D:\javamail\jaf-1.0.1\activation.jar;.;C:\jdk1.3\bin;C:\tomcat\lib\servlet.jar;C:jdk1.3\lib\tools.jar" Context log: path="/admin" Automatic context load docBase="C:tomcat\webapps\admin" Context log: path="/admin" Adding context path="/admin" docBase="C:\tomcat\webapps\admin" Starting endpoint port="8080" handler="org.apache.tomcat.service.http.HttpConnectionHandler" Starting endpoint port="8007" handler="org.apache.tomcat.service.connector.Ajp12ConnectionHandler" ★★★★★★★★★★★★★★★★★★★★★★★★★★ 私には、さっぱりの内容です^^; 何か、アドバイスあればよろしくお願いします。 バージョンアップも考えていますが、もうちょい、がんばってみます。
- yuji
- ベストアンサー率37% (64/169)
TOMCATのバージョンを上げることはできないのでしょうか? 3.2.4もしくは3.3.1を使った方がいいと思うのですが。 (4.0.1はまだ安定していない感があるので、お勧めしません。) 3.1.4は使ったことありませんが、セキュリティは大丈夫ですか? あまり古いバージョンだとセキュリティホールが塞がれて いなくて攻撃を受けやすい可能性があります。
補足
まいどまいどで、ありがとうございます。 TOMCATのバージョンは上げる事が出来ます。 仕事上使用しているとかではなくて、勉強してみよう と思い、見つけたCD(本か何かについてた)から TOMCATをインストールしたので、いつでも変更可能です。 ですので、セキュリティも全然大丈夫です。 ご心配して頂いて、ありがとうございます。 もうちょっと、色々調べてみて、だめだったらバージョンアップします。(結構、原因調査ってのも勉強になり面白かったりで^^;)
下の回答1の訂正です。 >どうもJSPの時は"Shift_JIS"と書かないとうまくいかないのですが、Servletの時は この記述は勘違いでした。encodingを"Shift_JIS"と指定するのは、server.xmlやweb.xmlの中でです。 JSPでも charset=SJIS の指定はできます。 (もしかするとTOMCATのバージョンで違うかもしれませんが・・・) 混乱させてしまいましたら、すみません。
補足
いえいえ、ありがとうございます。 色々教えて頂きありがたく思ってます。 早く、日本語が表示できるように必死でがんばってます。 ちなみに、現在は、下みたいになってます。 「??????? GET ????????????????」 恥ずかしながら、GETだけが正常に表示できてます。 がんばります。
- yuji
- ベストアンサー率37% (64/169)
//str = new String(str.getBytes("iso-8859-1"), "JISAutoDetect"); str = new String(str.getBytes("SJIS"), "JISAutoDetect"); とやってみたら、どうなります?
補足
コンパイルは、通りました。 しかし、表示させようとすると、エラーがでました。 下記に記します。 ---------------------------------------------- Error: 500 Location: /servlet/test.Servlet1 Internal Servlet Error: java.io.UnsupportedEncodingException: SJIS at sun.io.Converters.getConverterClass(Unknown Source) at sun.io.Converters.newConverter(Unknown Source) at sun.io.CharToByteConverter.getConverter(Unknown Source) at java.lang.String.getCTBConverter(Unknown Source) at java.lang.String.getBytes(Unknown Source) at kimura.Servlet1.doGet(servlet1.java:22) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:503) at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:597) at org.apache.tomcat.servlets.InvokerServlet.service(InvokerServlet.java:257) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:503) at org.apache.tomcat.core.ContextManager.service(ContextManager.java:559) at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:160) at org.apache.tomcat.service.TcpConnectionThread.run(SimpleTcpEndpoint.java:338) at java.lang.Thread.run(Unknown Source) ------------------------------------------------- また、tomcatのログ(tomcatインストールディレクトリ/conf/tomcat.log)にも同じエラーが書かれています。 そして、最初の2行に変なものがありますが、これは関係有りそうでしょうか? ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ Starting endpoint port="8080" handler="org.apache.tomcat.service.http.HttpConnectionHandler" Starting endpoint port="8007" handler="org.apache.tomcat.service.connector.Ajp12ConnectionHandler" ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ アドバイスよろしくお願いします。 エラーだらけで、泣きそうです。 でも、がんばります。
response.setContentType(text/html;charset=Shift_JIS); の代わりに response.setContentType("text/html;charset=iso-2022-jp"); と書いてみてください。(もしだめなら "SJIS"で試してみてください。) どうもJSPの時は"Shift_JIS"と書かないとうまくいかないのですが、Servletの時は iso-2022-jp もしくは SJIS と書くようです。 では。
補足
早速試してみました。 しかし、両方ともエラーが出てしまいます(泣) エラー内容です。 「Unsuported encoding: iso-2022-jp」 「Unsuported encoding: SJIS」 どうなってるんでしょうねぇ。 難しいですよ。 Unsuportedって、もしかして、何もサポートされてないなんてことだったら、どうしよう。。 困ったぁ~。
補足
JDK1.3を使用していますが、とりあえずチャレンジしました。 結果は、駄目でした。 まさに、奥が深いです。 でも、面白いですね。 がんばります。 早く、日本語が見たくなってきました。