- PR -

【struts】ActionFormの文字化け

投稿者投稿内容
最大40
常連さん
会議室デビュー日: 2004/02/06
投稿数: 41
投稿日時: 2006-09-11 10:46
strutsを使ったアプリケーションで、文字化けに悩まされています。
DB⇒JSPの表示は問題なく行えるのですが、JSP⇒ActionFormのところで化けてしまいます

■環境
DB:Oracle 10.2.2(JA16SJISTILDE)
JAVA:1.5.08
Struts:1.29
化ける文字:焉A丸数字等

jspのpageディレクティブは以下のように設定し

<%@ page pageEncoding="Windows-31J" contentType="text/html; charset=Windows-31J"%>

SetCharacterEncodingFilterでエンコーディングを"Windows-31J"に設定しています

デバッグしてみると、ActionFormのsetメソッドの時点で既に文字化けしているようです。

DBからのデータ取得・表示は問題ないので、strutsの問題化と思うのですが、解決策がわかりません。
対処方があれば教えていただけないでしょうか

質問ばかりで申し訳ないのですが、よろしくお願いいたします
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2006-09-11 16:30
Webサーバーは、なにを使ってますか?
Tomcatは、最近のバージョンになってから、URIに対しては、
setCharacterEncodingの設定を、適用しなくなったとのことです。
以下のスレッドが参考になるかと。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=32037&forum=12
<追記>
ちなみに、参考になるのは、しっぽの方だけであります。

[ メッセージ編集済み 編集者: Edosson 編集日時 2006-09-11 17:09 ]

私は、どっちかというと役立たずですが。orz

[ メッセージ編集済み 編集者: Edosson 編集日時 2006-09-11 17:25 ]
最大40
常連さん
会議室デビュー日: 2004/02/06
投稿数: 41
投稿日時: 2006-09-12 17:17
>Edossonさん

教えていただいた方法を試したのですが、、ダメでしたorz
他にも色々と試してみたんですが、どうもダメでした・・

入力欄に「@」を入れてActionFormの値を取り出すと、「@」に化けてしまいます。。
strutsで外字を扱うのは無理なんでしょうか・・

途方にくれております
jama
常連さん
会議室デビュー日: 2006/09/12
投稿数: 45
投稿日時: 2006-09-12 18:27
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=33003&forum=12&start=8&12
最大40
常連さん
会議室デビュー日: 2004/02/06
投稿数: 41
投稿日時: 2006-09-12 19:01
>jimaさん

提示して頂いた方法も試したのですが、やはりダメでした・・

DBからデータを取得して表示
DB⇒(ODBC)⇒アプリ⇒JSP
はOK

画面から入力した値をサーバで取得
JSP⇒(ActionForm)⇒アプリ
の場合はNGです
ActionFormから値を取り出した時点で化けています

servletのソースを追ってみたりしたのですが、
どこで化けているのかはっきりわかりません。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2006-09-13 10:27
丸数字って、外字なんですかね。

それはともかく、ActionForm内で、昔懐かしい、
コード:
String param = servlet.getParameter("paramname");
byte[] temp = param.getBytes( "iso-8859-1" );
param = new String( temp, "Windows-31J" );


ってやってみても、paramは化けたままですか?
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-09-13 11:10
引用:

最大40さんの書き込み (2006-09-11 10:46) より:
<%@ page pageEncoding="Windows-31J" contentType="text/html; charset=Windows-31J"%>



charset=Windows-31JってブラウザがIEの場合、認識しないのでは。
charsetの指定がない場合と同様の動き(=文字コードの自動識別)をして
Shift_JISと処理されているんじゃないかなぁ。
化けるのが機種依存文字の類だけなんでしたっけ。

お使いのブラウザの種類およびバージョンはなんでしょうか?
また、OSはなんでしょうか?

HTTPのパケット拾ってみて該当の文字がWindows-31Jでのバイト列で
送られていることが確認できれば、ブラウザ側の解釈の問題と
確定できるのですけれども。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2006-09-13 13:23
昔懐かしいやり方の場合、useBodyEncodingForURIは、falseにしておく必要がありますね。
以上、補足であります。

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