• 締切済み

文字化けします

またまた質問で申し訳ないんですが、よろしくお願いします。 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ではサポートされてないのでしょうか?? なんとか、解決策ってないでしょうか? 教えてください。よろしくお願いします。

  • Java
  • 回答数7
  • ありがとう数7

みんなの回答

noname#99638
noname#99638
回答No.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で設定している内容の一部ですので、こちらのファイルを一度覗いてみてください。 では、お役に立てずにすみませんが、がんばってください。

noname#99638
noname#99638
回答No.6

補足です。 もしJDK1.2.×を使っていらっしゃるのなら str.getBytes("iso-8859-1")を str.getBytes("iso8859-1") か str.getBytes("iso8859_1")に してみてください。 どうも、JDKのバージョンによってエンコーディング名が違うようです。 参考までに。

HELPMAN
質問者

補足

JDK1.3を使用していますが、とりあえずチャレンジしました。 結果は、駄目でした。 まさに、奥が深いです。 でも、面白いですね。 がんばります。 早く、日本語が見たくなってきました。

noname#99638
noname#99638
回答No.5

ひとつ確認していただきたいのですが、お使いの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.×にしてみてください。 参考までに。

HELPMAN
質問者

補足

おはようございます。 返事が遅くなりました。 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)
回答No.4

TOMCATのバージョンを上げることはできないのでしょうか? 3.2.4もしくは3.3.1を使った方がいいと思うのですが。 (4.0.1はまだ安定していない感があるので、お勧めしません。) 3.1.4は使ったことありませんが、セキュリティは大丈夫ですか? あまり古いバージョンだとセキュリティホールが塞がれて いなくて攻撃を受けやすい可能性があります。

HELPMAN
質問者

補足

まいどまいどで、ありがとうございます。 TOMCATのバージョンは上げる事が出来ます。 仕事上使用しているとかではなくて、勉強してみよう と思い、見つけたCD(本か何かについてた)から TOMCATをインストールしたので、いつでも変更可能です。 ですので、セキュリティも全然大丈夫です。 ご心配して頂いて、ありがとうございます。 もうちょっと、色々調べてみて、だめだったらバージョンアップします。(結構、原因調査ってのも勉強になり面白かったりで^^;)

noname#99638
noname#99638
回答No.3

下の回答1の訂正です。 >どうもJSPの時は"Shift_JIS"と書かないとうまくいかないのですが、Servletの時は この記述は勘違いでした。encodingを"Shift_JIS"と指定するのは、server.xmlやweb.xmlの中でです。 JSPでも charset=SJIS の指定はできます。 (もしかするとTOMCATのバージョンで違うかもしれませんが・・・) 混乱させてしまいましたら、すみません。

HELPMAN
質問者

補足

いえいえ、ありがとうございます。 色々教えて頂きありがたく思ってます。 早く、日本語が表示できるように必死でがんばってます。 ちなみに、現在は、下みたいになってます。 「??????? GET ????????????????」 恥ずかしながら、GETだけが正常に表示できてます。 がんばります。

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

//str = new String(str.getBytes("iso-8859-1"), "JISAutoDetect"); str = new String(str.getBytes("SJIS"), "JISAutoDetect"); とやってみたら、どうなります?

HELPMAN
質問者

補足

コンパイルは、通りました。 しかし、表示させようとすると、エラーがでました。 下記に記します。 ---------------------------------------------- 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" ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ アドバイスよろしくお願いします。 エラーだらけで、泣きそうです。 でも、がんばります。

noname#99638
noname#99638
回答No.1

response.setContentType(text/html;charset=Shift_JIS); の代わりに response.setContentType("text/html;charset=iso-2022-jp"); と書いてみてください。(もしだめなら "SJIS"で試してみてください。) どうもJSPの時は"Shift_JIS"と書かないとうまくいかないのですが、Servletの時は iso-2022-jp もしくは SJIS と書くようです。 では。

HELPMAN
質問者

補足

早速試してみました。 しかし、両方ともエラーが出てしまいます(泣) エラー内容です。 「Unsuported encoding: iso-2022-jp」 「Unsuported encoding: SJIS」 どうなってるんでしょうねぇ。 難しいですよ。 Unsuportedって、もしかして、何もサポートされてないなんてことだったら、どうしよう。。 困ったぁ~。

関連するQ&A

  • EUC-JP-LINUXの文字化け

    文字化けで困っているのですが,通常有名なエンコードをしても直りませんでした。 それで String enc = System.getProperty("file.encoding"); で表示させたら EUC-JP-LINUX とでましたが、この時の strPar = new String(strPar.getBytes("ISO-8859-1"),"Shift_JIS"); はどうしたらよいのでしょうか? ちなみに画面は contentType = "text/html;charset=Windows-31J" としています。

  • DBから取得したデータの文字化け

    Java初心者です。 (確認したい内容) ServletからMySQLのデータを取得したResultSetの項目で、2バイト文字が文字化けしていました。 私自身で調査した結果、 str = new String(str.getBytes("ISO-8859-1"), "JISAutoDetect"); ※str…文字化けしている項目 のコーディングで文字化けが解消されました。 しかし、この対応だと全ての2バイト文字に対して、このコーディングを入れなければなりません。 これはスタンダードなコーディングなんでしょうか? それとも環境周りの設定一発で不要になるものなんでしょうか? 私自身の周りに先生がいないため、自分の書いてるコーディングに自信がありません。 ご意見よろしくお願いします。 (環境) WinXP-Pro-SP1 j2sdk4.1.2_05 Tomcat4.1.24 Eclipse2.1.3 MySQL4.1.7

    • ベストアンサー
    • Java
  • 特殊文字のチェックの仕方

    c sharp(vs2010)環境で開発しています。 http://www.shurey.com/js/labo/character2.html ある文字がこの「特殊文字エリア」にあるか確認したくて、 以下のようなコードを描いてみました。 string str = "(株)"; //カッコカブ です。 Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS"); byte[] bytes = sjisEnc.GetBytes(str); 上記のように書いてみたのですが、byte[]の中には135 138が入っており、 8540~889E(10進で34112 - 34974)特殊文字の範囲には入らないようです。 きちんと値が取れれば、範囲内の数になるはずだと思っているのですが、 認識誤り、コードのミスなどありましたらご指摘いただけないでしょうか。 宜しくお願いします。

  • Ajax+Servletで文字化け

    Ajax+Servletで"I"、"II"等が文字化けしてしまいます。 以下のようにajaxを使いserver側のservletへアクセスしています。 xmlhttp = this.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Msxml2.XMLHTTP"); //コールバック関数の登録 xmlhttp.onreadystatechange = display; xmlhttp.open('POST','Test',true); xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlhttp.send(null); フトントの画面はJSPで <%@ page language="java" contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J" %> <meta http-equiv="Content-Type" content="text/html; charset=Windows-31J"> で定義しています。 サーブレットはpostgresのDBから項目を取得し、htmlを返却しています。 返却したhtmlをDOMのinnterHTMLを使い、画面を書き換えています。 response.setContentType("text/html; charset=Windows-31J"); servletからhtmlを返却する際、上記のようにWindows-31Jで返却すると、javascriptで"xmlhttp.responseText"の所で "ランタイムエラーが発生しました。デバックしますか 行107 c00ce56eの為、操作を完了できませんでした。" とエラーが出てしまいます。 response.setContentType("text/html; charset=shift-jis"); 出力する際、上記のようにShift-jisで返却すると、エラーは発生しないのですが、"I"、"II"等が文字化けしてしまいます。 何か解決策ありますでしょうか。 宜しくお願いします。

    • ベストアンサー
    • AJAX
  • 文字コード

    少し、聞かせてください。 今、WEBアプリケーションを作っています。 HTMLからのリクエスト文字を受け取りServletで処理を考えています。 そこで、 String para = request.getParameter(para); String param = new String(para.getBytes("8859_1","JISAutoDetect"); で、8859_1,Shift_JIS,EUC-JP,ISO-2022-JP の Unicode 変換することが できるのは、分かりました。 では、この HTML からのリクエスト文字が、どのタイプの文字コード でかかれているかを検出できるのでしょうか? 自分では、バイト列をつかさどる方法が浮かぶのですが・・・。 HPでもかまいませんので、教えてください。

    • ベストアンサー
    • Java
  • サーブレットについて

    こんにちは。 サーブレットに質問したいことがあります。 以下のサンプルソースで、 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(); } } ---------------------------------------------------

    • ベストアンサー
    • Java
  • javaの文字化けに困っています。

    改善方法はありますか。 public class daytime extends HttpServlet { protected String decodeString(String str){ try{ byte[] byteData = str.getBytes("ISO_8859_1"); str = new String(byteData, "Shift_JIS"); }catch(UnsupportedEncodingException e){ return null; } return str; } public void doGet(HttpServletRequest request ,HttpServletResponse response) response.setContentType("text/html;charset=Shift_JIS"); PrintWriter out = response.getWriter(); String tmp; String name = ""; tmp = request.getParameter("name"); Calendar cal = Calendar.getInstance(); out.println("<html lang=\"ja\" >"); out.println("<head>"); out.println("<title>ContextParam Example</title>"); out.println("<style>"); out.println("</style>"); out.println("<meta http-equiv=\"Content-Type\" Content=\"text/html;charset=Shift_JIS\">"); out.println("</head>"); out.println("<body>"); out.println("<table>"); out.println("<p>"); Connection conn = null; String url = "jdbc:mysql://localhost/list2"; String user = "list2"; String password = "list2"; out.println("</table>"); try { Class.forName("com.mysql.jdbc.Driver").newInstance(); out.println("Mysqlのロードに成功"); conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); String sql = "SELECT * FROM goods"; ResultSet rs = stmt.executeQuery(sql); out.println("<table>"); while(rs.next()){ out.println("<tr>"); out.println("<td>" +rs.getInt("id") + "</td>"); out.println("<td>" +rs.getString("name") + "</td>"); out.println("<td>" +rs.getString("mail") + "</td>"); out.println("<td>" +rs.getInt("price") + "</td>"); out.println("<form method=\"GET\" action=\"./daytime3\">"); out.println("<input type=\"hidden\" name=\"id\" value=\""+ rs.getInt("id") + "\">"); out.println("<td><input type=\"submit\" value=\"更新\"></td>"); out.println("<td><input type=\"submit\" value=\"削除\"></td>"); out.println("</form>"); out.println("</tr>"); } out.println("</table>"); rs.close(); stmt.close(); } catch (ClassNotFoundException e){ out.println("ClassNotFoundException:" + e.getMessage()); }catch (SQLException e){ out.println("SQLException:" + e.getMessage()); } catch (Exception e){ out.println("Exception:" + e.getMessage()); }finally{ try{ if (conn != null){ conn.close(); out.println("DBに切断"); }else{ out.println("データベースの接続ない"); } }catch (SQLException e){ } } out.println("</p>"); out.println("<tr>"); out.println("</tr>"); out.println("<A HREF='/dddd/daytime2'>登録</A>"); out.println("<A HREF='/dddd/daytime5'>アンケート</A>"); out.println("<div style=\"font-size: 40px; text-align: center; font-weight: bold\">"); out.println(cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DATE) + " " + cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE)); out.println("</div>"); out.println("</body>"); out.println("</html>"); protected String decodeString(String str){ try{ byte[] byteData = str.getBytes("ISO_8859_1"); str = new String(byteData, "Shift_JIS"); }catch(UnsupportedEncodingException e){ return null; } return str; } } }

  • Eclipse の エディターでの文字化け

    Eclipse で jspやhtmlファイルが文字化けしているのですが、どうやったら直りますか?携帯用のホームページを作成しているのでshift-jisを使いたいのですが、テキストファイルのエンコードは現在MS932になっています。 いまいち文字コードについてよくわかっていないのですが、先ほどtomcatのエンコードに「Windows-31J」を指定すればよいとの記述をみつけたので、やってみたのですが、変わりはありません。 また、これだと携帯からみれないってことになりますか? それとブラウザに表示した時に文字化けしているページもあります。しかし、ほとんどはちゃんと表示されています。この違いはなんでしょうか? 初心者でよくわかっていないので、よろしくお願いします。jspではcharset=SHIFT_JISを指定しています。(htmlもmetaタグでshift-jisを指定しています。)

    • ベストアンサー
    • Java
  • JavaScriptからServletに渡した文字列が文字化け

    度々お世話になっています。 今回もよろしくお願いします。 JavaScriptからServletに渡した文字列が文字化けしてしまい解決できずにいます。 以下に使っているコードを抜粋します。 1)HTML表示。 2)HTML内のボタン押下でJavaScriptからServletに文字列を渡す。 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=EUC-JP"> <SCRIPT LANGUAGE='JavaScript'> <!-- function subwinOpen() { window.open("pg_detail?type=0&detail=" + "国立競技場," +", "sub", "menubar=no") ; } //--> </SCRIPT> <FORM action="pg_detail" METHOD="get" NAME="myform1" onSubmit=""> <INPUT type="button" value="詳細" onClick="subwinOpen();" /> </FORM> 3)Servlet側で文字列取得。 pg_detail.java public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html;charset=EUC-JP"); String v_details = new String( req.getParameter("detail").getBytes("8859_1"), "JISAutoDetect" ); } 以上のコードを実行すると、 ”国立競技場,”が”国立競技?E”となってしまいます。 かなり端折ってしまいましたが、説明不足な個所があれば補足します。 よろしくお願いいたします。

  • メール(iso-2022-jp-2)のデコード

    お世話になります。 C#.NETまたはVB.NETでiPhoneから送られたメールを解析するメーラーを作っているのですが、 charset=iso-2022-jp-2、charset=iso-2022-jp-3で送られてくる場合があり、 そのデコードができずに困っております。 charset=iso-2022-jpですと、下記でデコードできるのですが、 charset=iso-2022-jp-2、charset=iso-2022-jp-3はそもそも Encodingクラスで扱えるエンコーディング名に存在しないので、 どのように変換してよいか分かりません。 string mailtext = "?"; // ←メール内容をそのまま入れます byte[] bytes = Encoding.ASCII.GetBytes(mailtext); string body = Encoding.GetEncoding("iso-2022-jp").GetString(bytes); 宜しくお願い致します。