[Jetspeed-japan-dev] Re: [jetspeed] 日本語入力について

Back to archive index

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/




Jetspeed-japan-dev メーリングリストの案内
Back to archive index