- PR -

strutsの文字化け

1
投稿者投稿内容
coogon
常連さん
会議室デビュー日: 2004/07/09
投稿数: 27
投稿日時: 2007-02-26 18:05
はじめまして。

struts1.2のValidatorプラグインの結果が文字化けします。
定番のメッセージリソースの内容が文字化けするのでは
なく、validation.xmlの定義内容が文字化けします。

具体的にはvalidation.xmlに以下の定義をし、

<field property="user_name" depends="required">
<arg0 key="ユーザー名" resource="false" />
</field>


user_nameが未入力だった場合に、「繝ヲ繝シ繧カ繝シ蜷搾シ?は必ず入力してください」
とarg0 key=で指定した「ユーザー名」と言う文字が文字化けして表示されて
しまいます。

JSP側では
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ page pageEncoding="Shift_JIS" %>
を定義し、META要素での定義はしていません。

サーブレット側では、SetCharacterEncodingFilterをFilterし、
更にActionServletクラスを継承し、オーバーライドしたprocessメソッド
でrequest.setCharacterEncoding("Shift_JIS");
を実行しています。

OS:WindowsXP SP2
TOMCAT:Tomcat5.5
Apache:連携なし
開発ツール:Eclipse3

宜しくお願いします。
きよの
常連さん
会議室デビュー日: 2004/02/07
投稿数: 34
投稿日時: 2007-02-26 18:48
引用:

coogonさんの書き込み (2007-02-26 18:05) より:
user_nameが未入力だった場合に、「繝ヲ繝シ繧カ繝シ蜷搾シ?は必ず入力してください」
(略)
<%@ page contentType="text/html; charset=Shift_JIS" %>



JSP では Shift_JIS で表示しようとしているようですが、実際に化けている部分はその化けかたからして utf-8 になっているように見えます。
coogon
常連さん
会議室デビュー日: 2004/07/09
投稿数: 27
投稿日時: 2007-02-27 13:27
ご返答ありがとうございます。>きよのさん

どこが原因かはまだ分かりませんが、想定に反してutf-8に
設定されていると言う観点でもう少し自力で調査してみます。

もし私の既存の設定以外で怪しいところがあるのでは?
と思われる方がいましたらご指摘をお願いします。
tmp
会議室デビュー日: 2006/01/12
投稿数: 11
投稿日時: 2007-02-27 13:55
私も以前似たような問題ではまったことがあるのですが、
java で xmlを読み取る際、エンコーディングの指定をしないと
(デフォルトでは)utf-8として読み取るみたいです。
そのため、きよのさんのご指摘の通り、utf-8になっているはずです。
引用:

JSP では Shift_JIS で表示しようとしているようですが、
実際に化けている部分はその化けかたからして utf-8 になっているように見えます。



解決策としては

  • (1) xmlファイルでファイルのエンコーディングを指定する
    (先頭に以下を挿入)
    <?xml version="1.0" encoding="Shift_JIS" ?>
  • (2) xmlファイルを"utf-8"で保存する

が良いかなと。

私が遭遇した問題は上記(1)で解消しました。
上記(2)は申し訳ありませんが、未実施です。
お時間があれば合わせてご確認下さい。
coogon
常連さん
会議室デビュー日: 2004/07/09
投稿数: 27
投稿日時: 2007-02-27 16:12
tmpさんご回答ありがとうございます。

以下の方法で解決しました。

・validation.xmlファイルでファイルのエンコーディングを指定する。

・eclipseでvalidation.xmlのテキスト・ファイル・エンコードを
Shift-JISにする。(ファイル右クリックのプロパティで設定)

・それと安全の為に、web.xml(Tomcatホームのconfの下の方)の
JSPのサーブレットタブの中に<init-param>でjavaEncodingを追加。
<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>

これで完全に文字化けは消えました。
皆さんありがとうございました。
1

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