- PR -

JSPの文字化け

1
投稿者投稿内容
モト
会議室デビュー日: 2004/08/19
投稿数: 4
投稿日時: 2004-08-19 13:19
JSPの中で、「表」という漢字を処理に入れると
Tomcatのエラーが出てしまいます。
対策がありましたらご教授いただきたく、よろしくお願いいたします。

-------- JSPの内容 --------
<%
String test = new String();
test = "表";
%>
-------- エラー内容 --------
org.apache.jasper.JasperException: JSPのクラスをコンパイルできません
JSPファイル: ***.jsp の中の行: **でエラーが発生しました
生成されたサーブレットのエラーです:
[javac] Compiling 1 source file
C:\Program Files\Apache Group\Tomcat 4.1\work\Standalone\localhost\***_jsp.java:**: 文字列リテラルが閉じられていません。
test = "ツ表";

-------- WEBサーバ環境 --------
Apache :2.0.47
Tomcat :4.1.29
OS : WindowsXP
ろっぷす
会議室デビュー日: 2004/07/27
投稿数: 8
投稿日時: 2004-08-19 13:46
ろっぷすと申します。

文字化けの件ですが、JSPのファイルのエンコーディングと
tomcatのJSPファイルのエンコーディング(defaultはUTF-8かな?)が
あっていないのではないでしょうか?。

tomcatのJSPファイルのエンコーディングは%TOMCAT_HOME%\conf\web.xmlの下記の行にあります。

//--- 抜粋
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>logVerbosityLevel</param-name>
<param-value>WARNING</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
---//
何も指定していなければdefaultのエンコーディングが使用されます。
モト
会議室デビュー日: 2004/08/19
投稿数: 4
投稿日時: 2004-08-19 14:28
ご回答ありがとうございます。

web.xml を以下のように設定し、Tomcatを再起動しました。
結果は同じく、Tomcatのエラーが出ました。

-------- web.xml --------
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
   〜略〜
<init-param>
<param-name>javaEncoding</param-name>
<param-value>Shift_JIS</param-value>
</init-param>
   〜略〜
</servlet>

-------- JSPのエンコーディング --------
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">

-------- エラー内容 --------
org.apache.jasper.JasperException: JSPのクラスをコンパイルできません
JSPファイル: ***.jsp の中の行: **でエラーが発生しました
生成されたサーブレットのエラーです:
[javac] Compiling 1 source file
C:\Program Files\Apache Group\Tomcat 4.1\work\Standalone\localhost\***_jsp.java:**: 文字列リテラルが閉じられていません。
test = "?\";

文字の化け方が変わりましたが、、
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2004-08-19 14:47
コード:
<%@ page contentType="text/html; charset=XXX" %>


XXXの部分にファイルのエンコーディングを設定しても文字化けしますか?
モト
会議室デビュー日: 2004/08/19
投稿数: 4
投稿日時: 2004-08-19 15:18
charset の指定はしていましたが、変えてみました。

<%@ page contentType="text/html; charset=8859_1"%>
  ↓
<%@ page contentType="text/html;charset=Shift_JIS" %>

と変えてみたところ、「表」という漢字は出るようになりました。
ですが、今度はJavaで出力した文字列が化けるようになりました。
これは、Javaから出力した文字列の文字コードを変換する処理を入れれば
回避できそうな気はします。


あるページで見つけたのですが(URLは載せていいのかわからないので割愛します)
Shift_JISコードで「表」は「95 5C」で、2バイト目が「5C」というコード
であり、Shift_JISで「5C = \」であるせいで、文字化けしてしまうとか。
  1.「表」→「95 5C」である。
  2.「5C = \」はエスケープが必要な文字と判断し、エスケープのため
       自動的にもうひとつ「\」を入れてしまう。
  3.結果、「表」→「95 5C 5C」→「表\」と表示される。
さらに調べたところ、回避策としては、コーディング時に「表\」として
おくとよいそうです。

今回、上記の回避策をとることにしました。
アドバイスありがとうございました。
後学のためもう少し調べてみて、何かわかったらまた書き込みをしたいと思います。
okutin
ベテラン
会議室デビュー日: 2003/12/11
投稿数: 98
お住まい・勤務地: 広島
投稿日時: 2004-08-19 15:38
こんにちは。

ご存知だとは思いますが、この問題が発生する文字は「表」だけではありません。
http://www.atmarkit.co.jp/fjava/rensai2/eclipse03/eclipse03.html
この記事の「コラム:TomcatのJSP文字コードの扱い」を参考に根本的な解決を行うことをおすすめします。
モト
会議室デビュー日: 2004/08/19
投稿数: 4
投稿日時: 2004-08-19 16:44
大変勉強になりました。慎重に検討いたします。
1

スキルアップ/キャリアアップ(JOB@IT)