- PR -

Struts2で文字化け

1
投稿者投稿内容
シン
会議室デビュー日: 2008/05/06
投稿数: 6
投稿日時: 2008-05-18 22:39
Struts2で文字化けとなり困っています。
どなたかご存じの方がいらっしゃいましたら、ご教授お願い致します。
※Struts2の文字化けについての情報は結構出回っているようですが、
 どうもうまくいきません。
 自分の備忘録、情報共有のためにも記載させてください。
 宜しくお願いします。

■問題
Struts2でURLのQueryStringに日本語を入力して、
Getした結果の表示文字列が化ける。
※URL直打ちした場合のみ文字化け。

<例>
〜/hoge.action?keyword=ほげ

「ほげ」が画面表示時に文字化けします。
------------------------------------------------------------
■詳細情報
 【やりたいこと】
  入力フォームからキーワードを入力して、
  キーワードで検索処理を走らせて、
  入力キーワード、検索結果を画面に表示する。
 

 【状況】
  ・正常処理(URL直打ちをせずに画面のボタン、リンクでのAction時)は、
   文字化けとならない。

  ・文字化け対策として、server.xmlの設定を変更。
   (URIEncoding="UTF-8" useBodyEncodingForURI="true"を追記)
   本設定を入れない場合は、正常処理時も文字化けします。

  ・SetCharacterEncodingFilterは使用していません。
------------------------------------------------------------
■環境
JDK:1.5.0_11
Windows:Vista
Tomcat:5.5.26
Eclipse:3.3.0
------------------------------------------------------------
■struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<!-- Add packages here -->
<include file="webapps.xml"/>
</struts>
------------------------------------------------------------
■server.xml
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
URIEncoding="UTF-8" useBodyEncodingForURI="true" />
------------------------------------------------------------
■JSP
<%@page contentType="text/html; charset=UTF-8" errorPage="./error.jsp"%>
<%@page pageEncoding="Windows-31J"%>
<%@taglib uri="/struts-tags" prefix="s"%>
------------------------------------------------------------
ひろ@ya
大ベテラン
会議室デビュー日: 2006/02/23
投稿数: 168
投稿日時: 2008-05-19 09:16
Tomcat5以降はデフォルトでURL(Getのパラメータ部含む)をUTF-8としてデコードします。

ブラウザ側がURLをどのようにエンコードするかは実装と設定に依存します。
(IEは「常にUTF-8でURLを送信する」の設定に依存)

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=32037&forum=12
にその辺りの詳しい情報があります。
シン
会議室デビュー日: 2008/05/06
投稿数: 6
投稿日時: 2008-05-22 22:03
ひろ@yaさん

アドバイスありがとうございます。

まず、結論としては
> URIEncoding="UTF-8" useBodyEncodingForURI="true"
本設定で文字化けがなく表示出来ました。
useBodyEncodingForURI="true"の設定反映ミス(サーバ再起動確認漏れ?)により、
URL直打ちした場合に文字化けとなっていました。

つまらないことで、お手数をお掛けしました。
下記サイトがエンコードについて詳しく書かれていましたので、記載しておきます。
http://tidus.ultimania.org/wiki/index.php?Tomcat

ありがとうございました。
1

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