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

Back to archive index

Mamoru WATANABE mamor****@hotma*****
2002年 12月 20日 (金) 12:50:33 JST


渡辺です。
また長くなりますが...

> このときのエンコーディング情報を取得する場所は、request からでなく、
> media.xreg から取得するようにすると良いと思います。
> かならずしも、UTF-8 ではないので、このファイルから使用しているメディ
> アタイプのエンコーディングをとるのが安全だと思います。

このmedia.xregにある<character-set>について以前から不思議に思っていた
のですが、これはデフォルトではUTF-8になっていて、この値をShift_JISに変
更してもJetspeedのページのContent-Typeは(PCのWebブラウザを使う限り)
"text/html; charset=UTF-8"で不変です。

因みにorg.apache.jetspeed.util.MimeTypeを見てみると、HTMLはUTF-8固定に
なっています。

また、org.apache.jetspeed.modules.pages.JetspeedTemplatePageを見てみる
と、JR.pのcontent.defaultencodingの行に指定したエンコーディングを
RunDataのcharactersetに設定しているようで(JR.pにエンコーディングの指
定がない場合はUTF-8)、実際にcontent.defaultencoding=Shift_JISと設定し
てJetspeedを使ってみると、"Content-Type:text/html; charset=Shift_JIS"
になります。

ということで、以下のような流れになればいいのではないかと考えました。
(1) JR.pに「content.defaultencoding=エンコーディング名」を指定して
    Jetspeedを起動
(2) Jetspeedのページにアクセスする。
(3) Jetspeedはコンテンツをリクエストしたブラウザに対して、HTTPヘッダに
    「Content-Type:text/html; charset=xxxxxx」と上記設定のエンコーディ
    ングを付けてコンテンツを返す。    
(4) WebブラウザはHTTPヘッダのContent-Typeフィールドにしたがって、自分
    のエンコーディングの設定を指定されたエンコーディングに合わせてコン
    テンツを表示する。
(5) WebブラウザからJetspeedの次の画面に移るためにリクエストをHTTPサー
    バに投げるときは、上記(3)のエンコーディングを使う。結果的に(1)で設
    定されているものと同じになる。
(6) Jetspeedは(4)で投げられたリクエストを受ける時に、その文字コードを
    以下の順で決定する。
        (a) リクエストのContent-Typeフィールドにcharset指定がある場合
            はそれを使う。
        (b) JR.pに指定されているエンコーディングを使う。
        (c) US-ASCIIを使う。
(7) (3)に戻る。

つまり、ParameterParserは上記(6)の部分に相当します。


ただし問題が残っていて、以下の3つの条件が揃った時には文字コードの判定
ができなくなります。
  (1) default.vmに<meta http-equiv="Content-Type" content="text/html;
      charset=Shift_JIS">とか<meta http-equiv="charset"
      content="Shift_JIS">が記述されている。
  (2) 上記<meta>タグに記述されているエンコーディングがJR.pの
      content.defaultencodingの行の値と違っている。
  (3) 「アカウントの編集」のようなHTMLフォームに日本語を入力して送信し
      た場合

ただし現時点では<meta>タグについては、
http://www.mail-archive.com/jetspeed-dev%40jakarta.apache.org/msg05176.html
ここに書いてある通り正常に解釈されていないので問題はないのですが、近い
将来問題となりそうです。


> でも、プールにないときの new DefaultParameterParser() をどのようなと
> きに実行されるのかが少し気になるところではありますが。

TR.pに以下のような記述があります。
> # Default capacity of pools of the Object pooling service.
> #
> # Default: 128
> services.PoolService.pool.capacity = 128
> 
> # Class specific capacities used instead of the default if specified.
> #
> #services.PoolService.pool.capacity.org.apache.turbine.services.rundata.DefaultTurbineRunData=512

多分この制限を越えるほどのアクセスがあった場合ではないでしょうか?

--
渡辺 衛
mamor****@hotma*****



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