Shinsuke SUGAYA
shins****@yahoo*****
2002年 12月 19日 (木) 14:33:39 JST
こんにちは、 > 私も最初setCharacterEncodingでOKだと思っていました。でも実際には > HTMLフォームに日本語を入力した場合には、ParameterParserの > CharacterEncodingは常に"US-ASCII"のままです。 > > 実はHTMLフォームを使った場合のContent-Typeはほとんどが(HTMLの<form>タ > グのデフォルトのenctype属性がapplication/x-www-form-urlencodedだから) > application/x-www-form-urlencodedになるため、既にエンコード済みのもの > であるから、Content-Typeにcharset=xxxxxとは付ける必要がなく(エンコー > ド済みの文字列にはUS-ASCII以外の文字が入らないから)、結果として > Request.getCharacterEncoding()では値をとってこれず、常に"US-ASCII"に > なってしまいます。 Turbine の方を確認したのですが、US-ASCII が入るのは、RunDataFuctory で new DefaultParameterParser() としていて、BaseValueParser で recycle() が実行されると、強制的に US-ASCII をセットしているためだと思います。 なので、recycle() で US-ASCII をセットするのではなく、characterEncoding を使わないのが問題ではないでしょうか。正しくは、new DefaultParameterParser (String enc) を実行して、recycle() で characterEncoding を使用することが 良い気がしています。(でも、おっしゃるとおり、BaseValueParser が機能して いないのでだめな気がしますが・・・) > ではParameterParserのcharacterEncodingに"US-ASCII"以外をセットする方法 > はというとShinsukeさんが仰るように > (1) ParameterParser.setCharacterEncoding(String enc)を呼ぶ > (2) ParameterParser.recycle(String enc)を呼ぶ > もしくは > (3) 最初からParameterParserのcharacterEncodingをUTF-8固定にする > となります。ただ、(1)(2)の方法では > > > もう一つはそれをどこで実行するかになると思っています. > > という問題が発生して、HelloAction.javaやCustomizeSetAction.java等 > Action部分のソース変更が必要になってしまうということになります。できれ > ばAction部分の変更なしでParameterParser.getString(String name)で値を取 > れるようにしたかったのです。 やはり、根本的なところを直したいと考えています。 Turbine, RunDataFuctory, DefaultParameterParser の各クラスを エンコーディングを正しくパースできるように新しく作り直すのが良いかと思っています。 大まかですが、これらのクラスを作り直せば、解決される気がしています。 (しかし、実際にやってみると問題があるかもしれないので、検討する必要が ありますが・・・) > 個人的にはユーザ名に日本語を使うのは反対です。(^_^; > ただUTF8ParameterParserを作った結果、現状のJetspeedではユーザ名の制限 > ができないために仕方なく対応させたものです(UTF8ParameterParserよりも > 時間を大幅にとられました)。 たしかに、ユーザー名に日本語を積極的に使いたくはないです・・・。 でも、ニーズはあるかもしれませんね。そういうことができたらできたで、 機能としてあると良いと思います。 > 問題になったのはURLエンコードする時の文字コードとエンコードされてきた > ものをデコードする時の文字コードに違いがあり、正常にデコードできないと > いう点です。ですのでできればユーザ名はURLエンコードが必要のない文字に > 制限できればいいのですが... LDAP などを使って、他のアカウントと同期などを考えると、一般的に Unix で使われているものと同じ仕様で制限するのが良いかと思います。 それの方が、分かりやすい気がしています。 何か間違っていそうでしたら、ご指摘ください。 shinsuke __________________________________________________ Do You Yahoo!? Yahoo! BB is Broadband by Yahoo! http://bb.yahoo.co.jp/