[cubby-user:86] Re: URLに日本語を含めたときに文字化けします

BABA,Yasuyuki [E-MAIL ADDRESS DELETED]
2008年 8月 30日 (土) 17:22:30 JST


馬場です。

Tomcat を使用しているなら、server.xml の Connector ディレクティブに
URIEncoding でエンコードを指定してみてください。

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"
URIEncoding="UTF-8" />

WTP の場合は Servers プロジェクトに現れる server.xml を編集しても有効で
はなく、Tomcat がインストールされたディレクトリの conf/server.xml の編集
が必要なのでご注意ください。


以下、理由など

1.0.x では HttpServletRequest#getRequestURI() を使用してパスを取得してい
たのですが、クッキーを使用できない場合に getRequestURI() の結果に
;jsessionid=... のような URL 埋め込みセッション情報まで含んでしまうサー
ブレットコンテナがあり、うまく解析できないことがあると分かりました。(確
認したのは Jetty です)
なので、1.1.0 から HttpServletRequest#getServletPath() を使用するように
変更しました。

getResuestURI() は URL エンコードされた文字列をそのまま取得できるのです
が、Tomcat の場合 getServletPath() は URIEncoding に指定されたエンコー
ディングでデコードされた文字列を取得します。URIEncoding が指定されていな
い場合は ISO-8859-1 が使用されるので、今回のような現象になります。


Hirokazu Tanaka さんは書きました:
> いつもお世話になってます。田中です。
> cubbyを1.0.0から1.1.0にバージョンアップしたところ
> 下記の事象がありましたのでご報告します。
> 
> 通常のパラメータはEncodingFilterが効いているため、文字化けしませんが、
> パスに日本語を入れて、それを取得した場合、文字化けするようになりました。
> 例)
> ・パス (実際には日本語の部分はURLエンコードされてます)
> /hoge/日本語/
> 
> ・メソッド
> @Path("/hoge/{name,.+}/")
> public ActionResult hoge() {
> ・・・・・
> }
> 
> 現状、下記のコードを入れて回避しています。
> name = new String(name.getBytes("ISO-8859-1"),"UTF-8");
> 
> 
> 1.0.0のときは文字化けしていなかったので、
> cubbyのフレームワークの方で何か変更等があったのでしょうか?
> 
> できれば、パスに日本語が含まれる場合でも、文字化けしない
> ように変更していただけると助かります。
> 
> 以上、よろしくお願いいたします。
> _______________________________________________
> cubby-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/cubby-user


-- 
BABA,Yasuyuki
[E-MAIL ADDRESS DELETED]


cubby-user メーリングリストの案内