- ベストアンサー
JSPのエラー
org.apache.jasper.JasperException: ERROR: character 0xc282 of encoding "UTF8" has no equivalent in "EUC_JP" org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:476) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:371) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 原因 javax.servlet.ServletException: ERROR: character 0xc282 of encoding "UTF8" has no equivalent in "EUC_JP" org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:846) org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779) org.apache.jsp.jsp.sub_jsp._jspService(sub_jsp.java:80) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 原因 org.postgresql.util.PSQLException: ERROR: character 0xc282 of encoding "UTF8" has no equivalent in "EUC_JP" org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1548) org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1316) org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:191) org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:452) org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:337) org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:329) atmarkit.MyDBAccess.execute(MyDBAccess.java:65) org.apache.jsp.jsp.sub_jsp._jspService(sub_jsp.java:67) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) おそらく文字の変換がいけないと思いますが、対処方法がわからないです・・ <ソース>の一部 <%@ page contentType="text/html; charset=Shift_JIS" %> <%@ page import="java.sql.*,atmarkit.MyDBAccess" %> <% while(rs.next()) { int id = rs.getInt("member_id"); String name = rs.getString("name"); String age = rs.getString("age"); int state = rs.getInt("attendance"); String comment = rs.getString("comment"); name = new String(name.getBytes("8859_1"), "Shift_JIS"); if(comment != null) { comment = new String(comment.getBytes("8859_1"), "Shift_JIS"); } %> 詳しい方いらしゃったら、教えてください。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>8859_1→ISO8859_1では? 8859_1はISO8859_1の省略形で同義ですのでこれは問題ありません。 >name = new String(name.getBytes("8859_1"), "Shift_JIS"); Shift_JISとありますが、このJSPへリクエストを発行する画面のエンコードはShift_JISになっていますか? おそらくIEだと思いますが、画面を表示したら表示→エンコードから確認してください。 ついでに、JavaのShift_JISはWindowsのShift_JISではありません。 WindowsのShift_JISはマイクロソフト拡張が入っていますので、 JavaではWindows-31J(もしくはMS932など)と記述します。 こうしないと丸付きの1などが正しく扱えません。 >英文字はいけましたけど、日本語だとエラーでますね。 半角英文字ですよね? 半角英文字はASCIIコードと言って、どんな文字コードでも必ず同じコード値で同じ文字になりますので、文字コードを間違えていても エラーになっていないのでしょう。
その他の回答 (3)
- PED02744
- ベストアンサー率40% (157/390)
これは、「UTF-8の0xC282はEUC_JPに変換できない」ってエラーですよね。 そもそも、JSPの中で、一旦latinでgetByteして、SJISにエンコードしたものを、UTF-8(JAVAのString)に入れている・・・ってのが よくわからないんですが。 そんなことしなくても、JDBCドライバレベルでエンコード・デコードされているはずなので、意識する必要はないんじゃないでしょうか? http://www.hellohiro.com/jdbcpostgresql.htm これが、EUC_JPでcreatedbしたものを、JAVAから扱っているサイトですが、特にencodingはしてませんよね? どうしても意識したければ、 PostgreのCライブラリ:int PQsetClientEncoding(*con, *encoding); みたいなものを作る必要があるんじゃないでしょうか。
>org.postgresql.util.PSQLException: ERROR: character 0xc282 of encoding "UTF8" has no equivalent in "EUC_JP" これってPostgreSQL使ってますよね? エラーメッセージそのままで、DBがEUCでEUCにない文字を入れようとして落ちてるのでは? PostgreSQLのJDBCドライバ仕様は詳しくないのですが、 親切に例外にしてくれているんではないでしょうか。
補足
回答ありがとうございます。 PostgreSQLを使ってます。 なんででしょうね。 英文字はいけましたけど、日本語だとエラーでますね。 もうちょっと粘ります。。
- fortranxp
- ベストアンサー率26% (181/684)
8859_1→ISO8859_1では?
お礼
回答ありがとうございます。 それとあまり関係ないと思いますね。 String comment = request.getParameter("comment"); ~略 String sql = "update shainlist set comment='" + comment + "', attendance=" + attendance + " where member_id=" + member_id; テキストボックス英文字いれると表示できますが、 日本語だとエラーがでます。 jsp保存するとき、文字コードはどれにしたらいいのでしょうか
補足
回答ありがとうございます。ちょっと長くなってしまいますので、 新しく立てます。